Accéder à un object a partir du "Name"

Résolu
ccito Messages postés 67 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 20 mai 2011 - 31 août 2010 à 13:04
ccito Messages postés 67 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 20 mai 2011 - 1 sept. 2010 à 12:33
Bonjour,

Je voudrait faire un programme dans lequel des objects tel que TabPage, TreeView, SplitContainer ou Button peuvent être ajoutés sur demande de l'utilisateur. Pour l'ajout des objects je pense avoir trouvé (j'utilise la Méthode Add). Puis j'ajoute une liaison pour chaque événement.

Bref, j'en suis ici :

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Page As New TabPage
        Dim SpC As New SplitContainer

        Page.Text = "Page " & TabControl1.Controls.Count
        Page.Name = Page.Text

        SpC.Dock = DockStyle.Fill
        SpC.BorderStyle = BorderStyle.Fixed3D
        SpC.Name = "Split" & Page.Name

        AddHandler SpC.Panel1.Click, AddressOf Event1

        Page.Controls.Add(SpC)

        TabControl1.Controls.Add(Page)

        TabControl1.SelectTab(Page.Name)
    End Sub


Mon problème arrive lorsque je veux ecrire la routine Event1. Je ne sait pas comment agir ou lire les propriétés d'un object que je vient d'ajouter.
Je pense qu'il faut s'indexer dessus a partir de la propriété Name, mais je n'arrive pas à trouver la bonne méthode.

Pourriez-vous m'expliquer la bonne marche a suivre pour ce type de fonctionnement ?

4 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
31 août 2010 à 22:24
Pour ce qui est de caster, ou faire un cast, la définition est <<faire une conversion de type>>, bien que le terme conversion peut prêter à confusion

En règle générale, faire un cast, c'est dire que l'on converti le type d'un objet en un autre type mais sans modifier l'objet lui-même

Dans le cas présent tu aura une variable de type objet qui contiendra un objet de type panel. Donc tu va convertir le type de ta variable en panel mais sans en changer le contenu.

Au niveau code, ça donnera, le code que tu as donné, mais je ne suis pas certain qu'il ne génère pas d'erreur.
Personnellement, j'écris de façon plus explicite ceci :

Dim p as Panel

p = DirectCast(Sender, Panel) 



Pour ton second problème, tu as un panel2 contenu dans un splitcontener1 et qui déclenche un évènement. Dans celui-ci, tu veux accéder au panel1 contenu lui-aussi dans le splitcontener1.

On ne peut pas non plus faire de miracle. Soit, au niveau de ton code, tu connais déjà l'existence de Panel1 et tu y accède directement, c'est le plus simple, soit tu la connais pas.

Dans ce cas, tu peux, dans cet exemple précis, avec la propriété parent, remonter au contrôle parent (splitContainer1) de ton contrôle déclencheur (panel2). Ensuite dans la propriété Controls du contrôle parent tu trouvera l'ensemble des contrôles qu'il contient, donc le panel2 mais aussi le panel1. Reste qu'il te faut trouver un moyen de pouvoir identifier celui qui t'intéresse. A priori pas par le nom car te ne le connais pas à moins de l'avoir stocker dans une variable lors de sa création.

Mais il faut que tu es dès le départ, un minimum de connaissance sur le parcours à effectuer et le contrôle à rechercher car sinon ça va devenir très vite complexe pour pas dire compliqué.



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
31 août 2010 à 13:39
Dans toute routine de gestion d'évènement, tu as un argument que l'on a l'habitude de nommé Sender, qui est de type Object et qui représente le contrôle qui a déclenché l'évènement

Il suffit de le caster au type réel de l'objet pour ensuite avoir accès directement à ses propriétés.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
ccito Messages postés 67 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 20 mai 2011 1
31 août 2010 à 21:55
Merci pour ta réponse casy,

j'avais vue cette argument mais je n'était pas sûr qu'il représenté le contrôle déclancheur. Cependant, dans le cas où le contrôle est déclanché par exemple par le mouseclick du panel2 du SplitContainer1.
Comment est-ce que je peut accéder au panel1 du SplitContainer1 ?

NB : Est-ce que tu peut me définir ce que signifie caster ? Je suppose que c'est quelque chose comme ce qui suit mais je n'en suis pas sûr.

Dim p as Panel

p = Sender
0
ccito Messages postés 67 Date d'inscription mercredi 5 mai 2010 Statut Membre Dernière intervention 20 mai 2011 1
1 sept. 2010 à 12:33
Merci casy pour tes explications. Elle ont était d'un grand secour.
0
Rejoignez-nous