Recherche dans class [Résolu]

ManuAntibes 454 Messages postés mardi 24 octobre 2000Date d'inscription 12 août 2016 Dernière intervention - 1 août 2016 à 16:31 - Dernière réponse : ManuAntibes 454 Messages postés mardi 24 octobre 2000Date d'inscription 12 août 2016 Dernière intervention
- 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
Afficher la suite 

7 réponses

Répondre au sujet
NHenry 14002 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 1 août 2016 à 17:57
0
Utile
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)
Commenter la réponse de NHenry
Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 2 août 2016 à 10:42
0
Utile
Bonjour

une requête Linq?

un truc du genre

ctlPanel.controls.First(Function(x) x.cage_nom =ValRow.Row("CageHamster")) 
Commenter la réponse de Whismeril
ManuAntibes 454 Messages postés mardi 24 octobre 2000Date d'inscription 12 août 2016 Dernière intervention - 2 août 2016 à 11:33
0
Utile
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
Commenter la réponse de ManuAntibes
Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - Modifié par Whismeril le 2/08/2016 à 12:34
0
Utile
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
Commenter la réponse de Whismeril
ManuAntibes 454 Messages postés mardi 24 octobre 2000Date d'inscription 12 août 2016 Dernière intervention - 2 août 2016 à 15:30
0
Utile
1
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
Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 2 août 2016 à 16:19
Oui, c.est un bon cours
Commenter la réponse de ManuAntibes
ManuAntibes 454 Messages postés mardi 24 octobre 2000Date d'inscription 12 août 2016 Dernière intervention - 4 août 2016 à 13:42
0
Utile
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...
Commenter la réponse de ManuAntibes

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.