Recherche dans class

Résolu
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 - Modifié par ManuAntibes le 1/08/2016 à 16:32
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 - 4 août 2016 à 13:42
Bonjour, à tous
j'essai de faire un petit jeu, d'élevage de Hamster. ;)
Par contre je n'arrive pas à sélectionner la cage par programmation directement, je suis obligé de lui faire faire une boucle sur toutes les cages pour savoir ou mettre les Hamsters.
et je vais avoir le même problème plus tard pour faire des actions sur les hamsters (ex: manger, dormir, bouger ...)
voici mon code:
    Private Sub ChargementHamster()

        For x = 0 To Me.Table_HamsterBindingSource.Count - 1
            Dim ValRow As DataRowView = Me.Table_HamsterBindingSource.Item(x)

            Hamster = New Class_Hamster(ValRow("NomHamster"), ValRow("SexeHamster"), ValRow("AgeHamster"))
            Hamster.Size = New Size(60, 80)
            Hamster.SizeMode = PictureBoxSizeMode.Zoom
            Hamster.Action = Class_Hamster.Actions.Normal
            Hamster.Mange = 50
            Hamster.VérifierEtatHamster()
            AddHandler Hamster.Click, AddressOf Click_Hamster

            Dim Trouvé As Boolean = False
            For Each ctlPanel In Me.FlowLayoutPanel_FondJeux.Controls 'les cages sont rangées à cote à cote.
                If TypeOf ctlPanel Is Panel Then
                    Dim st As String = ctlPanel.name
                    For Each ctlCage In ctlPanel.controls
                        If TypeOf ctlCage Is FlowLayoutPanel Then
                            If ctlCage.cage_nom = ValRow.Row("CageHamster") Then
                                ctlCage.Controls.Add(Hamster)
                                Trouvé = True
                                Exit For
                            End If
                        End If
                    Next ctlCage
                End If
                If Trouvé = True Then
                    Exit For
                End If
            Next ctlPanel
        Next x
    End Sub

a savoir que ma class_Hamster et inherit Picturebox, et la class_Cage et Inherit FlowLayoutPanel.
Est se un problème ?
Merci

6 réponses

NHenry Messages postés 15110 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 avril 2024 159
1 août 2016 à 17:57
Tu peux peut être essayer en utilisant un
Dictionary(Of TKey, TValue)
où TKey est le nom de ta cage et TValue la cage en question.
(Renseignes-toi sur le programmation générique)
0
Whismeril Messages postés 19011 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 10 avril 2024 654
2 août 2016 à 10:42
Bonjour

une requête Linq?

un truc du genre

ctlPanel.controls.First(Function(x) x.cage_nom =ValRow.Row("CageHamster")) 
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
2 août 2016 à 11:33
Bonjour
je recherche de l'aide et sur vos propositions de reponse, mais je ne comprend pas tous et je n'arrive pas à utiliser vos propositions.

mais je pense que je pose mal ma question.

je crée des cages dans mes panels et dans une class_cage.


        Cage = New Class_Cage '  Inherits FlowLayoutPanel
        Cage.Dock = DockStyle.Fill
        Cage.AutoScroll = True
        Cage.Cage_Nom = "Cage" & Stock.NumCage
        Cage.Carotte_Valeur = 0
        Cage.Fromage_Valeur = 0
        Cage.Eau_Valeur = 0
        _CageVide.Controls.Add(Cage) '_cageVide est un panel


comment faire une recherche dans ma class_cage pour interroger le nombre de Cage_Nom, et voir le niveau des carottes et autres aliments.
exemple:
"Cage1", Carotte 50, Fromage 10, eau 100.
"Cage2", Carotte 20, Fromage 30, eau 50.
etc

je n'arrive pas à faire une recherche dans la class_Cage, je suis obligé de faire une recherche sur la fenêtre par panel puis par FlowLayoutPanel etc...

et du coup cela finir par faire trop lourd en boucle et Timer.

ne peut on pas interroger ma class_cage plus simplement.
Merci
0
Whismeril Messages postés 19011 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 10 avril 2024 654
Modifié par Whismeril le 2/08/2016 à 12:34
Déjà tu te sers des contrôles comme de collections, même si cette possibilité est restée, ça n'est pas la meilleure façon de faire.

En .Net, l'idée est de gérer les données dans des collections de données (List pour la plus courante) et de se servir des contrôles juste pour l'affichage et l'interaction avec l'utilisateur.

Et après vérification ControlCollection ne permet de recherche Linq, donc ma proposition de ce matin ne marche pas.

Cependant, elle possède la méthode Find

donc si tu veux trouver le contrôle dont le nom est Cage1
ctlPanel.controls.Find(Function(x) x.cage_nom ="Cage1") 


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
2 août 2016 à 15:30
salut

oui je me douté bien que je partais de travers dans mon projet.

du coup en recherchant avec List(T) et collection

je trouve le cours :
http://plasserre.developpez.com/cours/vb-net/?page=langage-vb3#LV-H

cela va bien m'aider, je pense.

merci
0
Whismeril Messages postés 19011 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 10 avril 2024 654
2 août 2016 à 16:19
Oui, c.est un bon cours
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
4 août 2016 à 13:42
http://www.commentcamarche.net/forum/affich-33762644-recherche-par-date-sur-un-datagridview#p33781224
en lisant d autre poste sur le net voilà un message qui réponde à mes attentes.

Merci whis...
0
Rejoignez-nous