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

VB.NET Discussion :

Remplir un combobox d'une autre form [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Par défaut Remplir un combobox d'une autre form
    Bonjour tout le monde,

    lorsque je charge mon programme, je charge les données d'un fichier (que je choisi) pour alimenter une DGV dans ma mainform.
    Lorsque je veux éditer une ligne, je clique droit puis éditer et charge ma form2 dans laquelle je récupère mes datas (dans des textbox, combobox et richtextbox).
    J'ai besoin qu'au chargement de mon fichier je récupère certaines données pour qu'elles servent à remplir une des combobox de la form2 (qui n'est donc pas encore chargée).

    Suite à mes récentes demandes résolues, je suis partie sur le principe des properties (en mode public shared) de manière à remplir un tableau dynamique de type collection ou list(of string). De cette manière je me suis dis, j'ouvre mon programme, choisi mon fichier de données, je rempli mon tableau dynamique, et lorsque je charge la form2 je viens remplir la combobox en question à partir de ce tableau.

    Sauf que bien que l'idée soit bonne (?) (il y a surement soit plus simple soit plus beau) je ne comprend pas comment y mettre en place !

    Avant de basculer ce combobox dans cette nouvelle form il était dans la principale mais c'était juste pour tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        	Dim doc As New XmlDocument()
        	doc.Load(TOOLFile)
     
    	Dim nameList As XmlNodeList = doc.SelectNodes("/LISTETOOL/" & tool)
    	For Each name As XmlNode In nameList
    		comboBox_Tool.Items.Add(name.InnerText)
    	Next
    J'aimerai donc réussir à remplir ce combobox de ma 2nde form au chargement du fichier qui se fait dans la mainform via un tableau dynamique (toutes autres solutions sont les bienvenues).

    Pourquoi je ne charge pas ce fichier à l'ouverture de la 2nde form, simplement parce que le programme va faire que ça à chaque édition de ligne de la DGV, je trouve ça un poil bête, alors qu'en remplissant dès le début un tableau dynamique je réduit le nombre d'instruction.

    PS : le tableau doit être dynamique car je ne sais pas à l'avance combien d'élément il va devoir comporter.

    Merci d'avance pour votre aide !

  2. #2
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Bonjour,
    Pour ouvrir ton deuxième form, tu dois faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim f as new form2
    f.showdialog
    Et bien, rajoute une étape, ici la variable f permet d'accéder aux objets de la form2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim f as new form2
    f.macombobox.add() ...
     
     
    ...
     
    f.showdialog
    Le code est approximatif mais l'idée est là ^^'

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Par défaut
    J'y ai pensé, mais c'est pas si simple.

    J'ouvre mon fichier pour remplir le combobox indépendamment de l'appel pour ouvrir ma form2.

    Ce que je veux dire c'est que l'import des données se fait depuis une fonction dans ma mainform et c'est tout. L'appel d'ouverture de la form2 ne se fait pas à la suite direct de l'import des données, je sais pas si c'est clair...

  4. #4
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    C'est un faux problème ça.
    Si tu charge les données dans une autre fonction, crées une variable globale pour les enregistrer et les rendre accessibles de partout. C'est pas le plus propre mais sans connaitre ton code, je vois mal comment t'en proposer d'autres avec mon niveau de compétence ^^

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Par défaut
    T’inquiète

    je viens justement de passer certaines variable dans ma class de property en public shared et tant pis, a chaque demande d'édition de ligne je fais ma requête xml pour remplir le combobox, ça marche, c'est moche, mais au lieu de rester bloquer X temps au moins j'avance.

    Le problème que j'ai d'une manière générale depuis que je me suis remis à coder (c'est à dire il y a 2 semaines de ça après + de 10ans d'abstinence), c'est que je suis pommé sur là où je dois faire mes déclarations de variable pour qu'elles soient accessibles comme j'en ai besoin. Quand c'est local à une fonction aucun soucis, quand c'est locale à une form ça va encore, mais dès que je passe à de la variable globale à mon programme là je pagaie sans rame !

    Mais bon je vais y arriver, je pense qu'il y a un déclic qui ne s'est pas encore fait (et c'est pas les "tutos" que je vais trouver car ils sont tous sur des choses "simples" - pas de multiform avec accès à des données particulières- la joie des tutos )

    Bref !!!

    Merci pour ton aide !

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Voici un exemple avec un fichier texte
    Dans form1 (un bouton) chargement dans le load, puis, sur le clic du bouton, passage à la form2 par le constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class Form1
        Private lsPourCombo As List(Of String)
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            lsPourCombo = IO.File.ReadAllLines("D:\data\fichiers\listelignes.txt").ToList
        End Sub
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim f As Form2 = New Form2(lsPourCombo)
            f.ShowDialog()
        End Sub
     
    End Class
    Dans form2 (une combobox)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Class Form2
     
        Public Sub New(ls As List(Of String))
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            ComboBox1.DataSource = ls
        End Sub
     
    End Class
    A adapter avec ton chargement de données
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Par défaut
    ah ouais !

    je vais tester ça rapidement ! Merci rv26t !!!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Par défaut
    J'ai fait encore plus simple (sauf erreur de ma part)

    Déclaration de ma variable pour lire le fichier xml comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    Public Partial Class MainForm
    Private nameList As XmlNodeList
    ...
    puis quand je charge le fichier désiré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    nameList = doc.SelectNodes("/LISTETOOL/" & Cls_DataValues.tool)
    ...
    enfin quand je fais une édition d'une ligne de la DGV :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim fConsigne As New Form3(nameList)
     
    		If fConsigne.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
    			fConsigne.Dispose	
    		End If
    ...
    avec une surcharge du constructeur de la form3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Sub New(ByVal nameList As XmlNodeList)
    		Me.InitializeComponent()
     
    		For Each name As XmlNode In nameList
    			comboBox_Tool.Items.Add(name.InnerText)
    		Next
    ...
    ça vous semble correct ? (en tout cas ça marche)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier une combobox depuis une autre form
    Par piero53 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 31/03/2009, 21h51
  2. MAJ Combobox d'une FORMS(1) depuis une autre FORMS(2)
    Par stephane77fr dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/08/2007, 13h54
  3. combobox depuis une autre forme
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 31/05/2007, 21h54
  4. [C#] Acceder à la méthode d'une autre form
    Par dacid dans le forum Windows Forms
    Réponses: 35
    Dernier message: 23/03/2005, 14h49
  5. Comment basculer le focus depuis une autre form ?
    Par altahir007 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 03/09/2003, 15h54

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