IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

VB2005 : Comment récupérer la valeur d'une comboBox pas encore créé ?


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut VB2005 : Comment récupérer la valeur d'une comboBox pas encore créé ?
    Bonjour,
    nouveau venu sur ce forum, j'espère ne pas m'etre trompé en choisissant celui-ci, si c'est le cas je m'en excuse.
    Si quelqu'un peut m'aider pour résoudre mon problème, je le remercie par avance, vos conseils et liens me seront précieux pour trouver la bonne démarche.

    Je souhaite gérer de façon dynamique les composants, mais c'est peu-etre une méthode plus compliquée.
    J'utilise VB avec visualStudio 2005.

    Au démarrage ma Form1 est vide.
    FormLoad() appelle loadComposant() qui affiche une comboBox avec 2 choix.
    Lorsqu'on effectue un choix (nom ou prénom), un nouveau textBox s'affiche avec d'inscrit : "Tapez un(e) " & choix effectué.

    Lorsque l'événement Cb1SelectedValueChanged s'effectuera il affectera le choix sélectionné de Cb1 à la variable choixCb1, mais Cb1 n'étant pas encore créé, on a pas accès à ce composant => inexistant lors du codage.

    Comment récupérer la valeur d'une comboBox pas encore créé ?
    Est on obligé de déclarer les composants par avance pour résoudre le problème ?

    Voici le code, j'espère que cela vous éclairera un peu plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Public Class Form1
        Dim positionLigne As Integer = 40 'position Height du composant
        Dim choixCb1 As String = Nothing 'affecté par Cb1.SelectedValueChanged
        'Chargement d'une liste de choix lors du FormLoad()
        Private Sub loadComposant()
            Dim Cb1 As New ComboBox
            Cb1.Items.Add("Nom")
            Cb1.Items.Add("Prénom")
            Cb1.Location = New System.Drawing.Point(0, 0)
            Controls.Add(Cb1)
            AddHandler Cb1.SelectedValueChanged, AddressOf Cb1SelectedValueChanged
        End Sub
        'Chargement d'une textBox pour la nouvelle ligne, survenu par la sélection d'un choix dans Cb1
        Private Sub loadLigne(ByVal par_choixCb1 As String)
            Dim txt1 As New TextBox
            txt1.Location = New System.Drawing.Point(0, positionLigne)
            txt1.Text = "Tapez un(e) " & par_choixCb1
            Controls.Add(txt1)
            positionLigne += 30
        End Sub
        '
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            loadComposant()
        End Sub
        '
        Private Sub Cb1SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
            'pour info :
            ' => sender.ToString renvoie => System.Windows.Forms.ComboBox, Items.Count: 2
            ' => e.ToString renvoie => System.EventArgs
            'PROBLEME :
            ' ??? choixCb1 = Cb1.TextChanged => Cb1. inexistant lors du codage
            loadLigne(choixCb1)
        End Sub
    End Class
    bonne journée, bon WE

  2. #2
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Bonjour et bienvenue

    Comment récupérer la valeur d'une comboBox pas encore créé ?
    Est on obligé de déclarer les composants par avance pour résoudre le problème ?
    Tu peux considerer un controle cree dynamiquement comme une variable (comme des controles dans une collection redimentionnable a volontee) Donc pas besoin de declarer les controles en dur

    Dans ton cas precis je ferai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Cb1SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
            'pour info :
            ' => sender.ToString renvoie => System.Windows.Forms.ComboBox, Items.Count: 2
            ' => e.ToString renvoie => System.EventArgs
     
            'on requalifie le sender, heureusemenent on est sur qu'il s'agit d'un combo
            dim cb1 as combobox = directcast(sender, combobox)
            choixCb1 = Cb1.Text
        End Sub
    Cependant ton code n'est pas si dynamique que ca, puisque la gestion des evenements, elle est inscrite en dur dans la form.
    Pour architecturer ca au mieux: cree une classe Combobox manager dans laquelle se trouve le controle et ses evenements, ensuite en creant TextBoxManager, tu pourra avoir une idee de la forme de la classe de base commune au TextBoxManager et au ComboboxManager et creer vraiement du super-dynamique

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/08/2006, 17h01
  2. Récupérer la valeur d'une combobox
    Par Invité dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2006, 15h20
  3. Réponses: 1
    Dernier message: 21/11/2005, 12h07
  4. Réponses: 2
    Dernier message: 29/05/2005, 19h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo