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   -
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.

4 réponses

Utilisateur anonyme
 
Bonjour

quel VB?
  • VBA
  • VB6
  • VBS
  • VB.Net

0
VF77100 Messages postés 100 Date d'inscription   Statut Membre Dernière intervention   2
 
VB.Net, Visual Basic
0
Utilisateur anonyme
 
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.
 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
0
VF77100 Messages postés 100 Date d'inscription   Statut Membre Dernière intervention   2
 
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 :
    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 ^^
0
Utilisateur anonyme
 
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 à
        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.
0
VF77100 Messages postés 100 Date d'inscription   Statut Membre Dernière intervention   2
 
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.
0
Utilisateur anonyme
 
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.


0
VF77100 Messages postés 100 Date d'inscription   Statut Membre Dernière intervention   2
 
Je vais essayer ce que tu viens de dire.
0