Utilisation de la ComboBox
VF77100
Messages postés
100
Date d'inscription
Statut
Membre
Dernière intervention
-
VF77100 Messages postés 100 Date d'inscription Statut Membre Dernière intervention -
VF77100 Messages postés 100 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je vous contacte car, après de nombreuses recherches infructueuses, je n'ai trouvé aucune solution à mon problème.
Je suis débutant dans ce domaine, mais mon projet est de créer un logiciel, dans lequel, dans le combobox 1 affiche une liste, puis, selon la sélection du combobox1, Combobox2 affiche une autre liste.
J'espère que vous m'avez compris ^^
Je vous remercie d'avance.
Je vous contacte car, après de nombreuses recherches infructueuses, je n'ai trouvé aucune solution à mon problème.
Je suis débutant dans ce domaine, mais mon projet est de créer un logiciel, dans lequel, dans le combobox 1 affiche une liste, puis, selon la sélection du combobox1, Combobox2 affiche une autre liste.
J'espère que vous m'avez compris ^^
Je vous remercie d'avance.
A voir également:
- Utilisation de la ComboBox
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Vous avez utilisé ce numéro de téléphone à de trop nombreuses reprises - Forum Gmail
- Impossible d'utiliser l'outil déplacement car la couche de destination est masquée ✓ - Forum Graphisme
- Imprimante en cours d'utilisation ✓ - Forum Imprimante
4 réponses
VF77100
Messages postés
100
Date d'inscription
Statut
Membre
Dernière intervention
2
VB.Net, Visual Basic
En supposant que tu aies structuré tes données judicieusement dans une List(of) ou autre collection.
Voila un exemple d'aliments, ou on choisit d'abord Viande, Fruit ou Légume, pour disposer de la seconde liste.
Tout d'abord j'écris une enumérable, juste pour éviter les problèmes d'orthographe.
Ensuite la classe qui va bien pour stocker les données.
J'y mets une propriété qui ne concerne pas notre exemple juste pour montrer qu'elle ne génera pas.
Ensuite pour l'exemple j'initialise une liste d'aliments, note que je n'ai pas mis de poisson, cette liste doit avoir une portée sur tout la Form
Puis, je fais une requête GroupBy sur cette liste pour sortir les types utilisés, on ne va pas mettre du poisson, on ne l'utilise pas. Le résultat sert de DataSource au premier combobox.
Enfin dans l'événement SelectedIndexChanged dudit combobox, on récupère le choix de l'utilisateur pour faire une requête Where sur la liste d'aliments qui sert de DataSource au second combobox.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Voila un exemple d'aliments, ou on choisit d'abord Viande, Fruit ou Légume, pour disposer de la seconde liste.
Tout d'abord j'écris une enumérable, juste pour éviter les problèmes d'orthographe.
Public Enum TypeAliment Viande Poisson Legume Fruit End Enum
Ensuite la classe qui va bien pour stocker les données.
J'y mets une propriété qui ne concerne pas notre exemple juste pour montrer qu'elle ne génera pas.
Public Class Aliment Public Sub New(ByVal LeNom As String, ByVal LeType As TypeAliment, ByVal LesCalories As Integer) Nom = LeNom Type = LeType Calories = LesCalories End Sub Public Property Nom() As String Public Property Type() As TypeAliment Public Property Calories() As Integer End Class
Ensuite pour l'exemple j'initialise une liste d'aliments, note que je n'ai pas mis de poisson, cette liste doit avoir une portée sur tout la Form
aliments = New List(Of Aliment)() aliments.Add(New Aliment("Cote de Porc", TypeAliment.Viande, 100)) aliments.Add(New Aliment("Fraise", TypeAliment.Fruit, 50)) aliments.Add(New Aliment("Rumsteck", TypeAliment.Viande, 120)) aliments.Add(New Aliment("Haricots", TypeAliment.Legume, 40)) aliments.Add(New Aliment("Carottes", TypeAliment.Legume, 35)) aliments.Add(New Aliment("Cerise", TypeAliment.Fruit, 100))
Puis, je fais une requête GroupBy sur cette liste pour sortir les types utilisés, on ne va pas mettre du poisson, on ne l'utilise pas. Le résultat sert de DataSource au premier combobox.
Dim typesUtilises As List(Of TypeAliment) = aliments.GroupBy(Function(a) a.Type).Select(Function(g) g.Key).ToList() comboBox1.DataSource = typesUtilises
Enfin dans l'événement SelectedIndexChanged dudit combobox, on récupère le choix de l'utilisateur pour faire une requête Where sur la liste d'aliments qui sert de DataSource au second combobox.
Private Sub comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Dim choix As TypeAliment = CType(comboBox1.SelectedItem, TypeAliment) Dim alimentsFiltres As List(Of Aliment) = aliments.Where(Function(a) a.Type Is choix).ToList() comboBox2.DataSource = alimentsFiltres comboBox2.DisplayMember = "Nom" End Sub
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
J'ai à peu près compris la logique de ton exemple, mais comme je l'ai dit, je ne suis pas doué en ça car je débute ^^
Selon le type de nourriture que tu propose comme la viande ou autre, que tu sélectionne justement un type de nourriture, un choix apparaîtra ainsi que des données concernant chacune des nourritures.
Dans mon cas, je suis partis sur ça à la base :
Dans mon exemple, j'ai choisis des films, si la personne à sélectionné dans la ComboBox1 " Harry Potter", je veux que la ComboBox2 liste chaque film d'Harry Potter.
Tu avais compris de toute façon ^^
Selon le type de nourriture que tu propose comme la viande ou autre, que tu sélectionne justement un type de nourriture, un choix apparaîtra ainsi que des données concernant chacune des nourritures.
Dans mon cas, je suis partis sur ça à la base :
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load If ComboBox1.Text = "Harry Potter" Then ComboBox2.Items.Add("1- Harry Potter à l'école des sorciers") ComboBox2.Items.Add("2- Harry Potter et la chambre des secrets") End If End Sub
Dans mon exemple, j'ai choisis des films, si la personne à sélectionné dans la ComboBox1 " Harry Potter", je veux que la ComboBox2 liste chaque film d'Harry Potter.
Tu avais compris de toute façon ^^
Avoir un projet c'est bien, connaitre les bases avant de l'écrire et se fourvoyer c'est mieux (expérience personnelle).
Un bon cours pour commencer
https://plasserre.developpez.com/cours/vb-net/
Quand à
Admettons que tu aies 100 titres de films, si le gars cherche Harry Potter, ça te fais 1 if et 7 Add, mais s'il cherche sorcier, ou secret, ou chambre ou école....
Et puis quand tu va vouloir ajouter quelques films, il te faudra tout reprendre?
Recompiler?
Non, on manipule des données, stockées dans des fichiers dédiés. Pour l'exemple je les ai saisies en dûr dans le code parce que je n'allais pas te montrer une désiarialisation xml ou un accès bases de données, y a pleins de tutos pour ça, mais en vrai c'est comme ça que l'on fait.
Tu ne peux pas tout saisir, prévoir toutes les requêtes que l'utilisateur fera un jour.
Et la ce que tu montres se cantonne au titre, mais il y a les personnages, les acteurs, réalisateurs, scénaristes, etc....
Seule une gestion des données bien pensée et si possible évolutive permet une utilisation efficace et une maintenance réduite.
Un bon cours pour commencer
https://plasserre.developpez.com/cours/vb-net/
Quand à
If ComboBox1.Text = "Harry Potter" Then ComboBox2.Items.Add("1- Harry Potter à l'école des sorciers") ComboBox2.Items.Add("2- Harry Potter et la chambre des secrets") End If
Admettons que tu aies 100 titres de films, si le gars cherche Harry Potter, ça te fais 1 if et 7 Add, mais s'il cherche sorcier, ou secret, ou chambre ou école....
Et puis quand tu va vouloir ajouter quelques films, il te faudra tout reprendre?
Recompiler?
Non, on manipule des données, stockées dans des fichiers dédiés. Pour l'exemple je les ai saisies en dûr dans le code parce que je n'allais pas te montrer une désiarialisation xml ou un accès bases de données, y a pleins de tutos pour ça, mais en vrai c'est comme ça que l'on fait.
Tu ne peux pas tout saisir, prévoir toutes les requêtes que l'utilisateur fera un jour.
Et la ce que tu montres se cantonne au titre, mais il y a les personnages, les acteurs, réalisateurs, scénaristes, etc....
Seule une gestion des données bien pensée et si possible évolutive permet une utilisation efficace et une maintenance réduite.
J'ai compris ce que tu viens de dire, je vais faire un tour pour comprendre les cours sur le site.
Mais tu n'as pas compris.
L'utilisateur n'entrera aucune données, mais devra en sélectionner, qui seront prédéfinies.
La combobox1 Listera les films qu'ils devra choisir puis la combobox2 indique la liste des "extensions" du film.
A vrai dire. Ce logiciel sera pour un usage personnel.
Mais plus tard, si il fonction, je le réserve pour un usage public.
Mais tu n'as pas compris.
L'utilisateur n'entrera aucune données, mais devra en sélectionner, qui seront prédéfinies.
La combobox1 Listera les films qu'ils devra choisir puis la combobox2 indique la liste des "extensions" du film.
A vrai dire. Ce logiciel sera pour un usage personnel.
Mais plus tard, si il fonction, je le réserve pour un usage public.
L'utilisateur n'entrera aucune données, mais devra en sélectionner, qui seront prédéfinies.
Peut importe, si tu te fades toutes les recherches en dur dans le code, tu en auras pour des jours, et des milliers de lignes.
Ce sera une gageure à maintenir.
Alors qu'avec un fichier de données, une ou deux requêtes suffisent.
Un nouveau film => ajout dans le fichier de données
Un nouveau critère => ajout dans le fichier de données
Aucune ligne de code pour cette maintenance.
Plus envie de critères prédéfinis, mais choix entre tous les mots significatifs des titres disponibles => une requête pour extraire sans doublon, les mots de 4 lettres et plus...
Très peu de modifications pour cette maintenance.