ccito
Messages postés67Date d'inscriptionmercredi 5 mai 2010StatutMembreDernière intervention20 mai 2011
-
31 août 2010 à 13:04
ccito
Messages postés67Date d'inscriptionmercredi 5 mai 2010StatutMembreDernière intervention20 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 ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
ccito
Messages postés67Date d'inscriptionmercredi 5 mai 2010StatutMembreDernière intervention20 mai 20111 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.