Mortasgus
Messages postés5Date d'inscriptionjeudi 17 avril 2003StatutMembreDernière intervention28 juin 2010
-
22 juin 2010 à 12:12
Mortasgus
Messages postés5Date d'inscriptionjeudi 17 avril 2003StatutMembreDernière intervention28 juin 2010
-
28 juin 2010 à 22:03
Avant toute chose, bonjour a tous et merci par avance de lire ces quelques lignes.
En espérant poser la bonne question au bon endroit, sinon merci de déplacer mon sujet dans la rubrique approprié.
Environnement : visual Basic 2010 express
Je viens vers vous car j'essaye d'accéder a une suite de contrôles qui se trouve eux même dans d'autres contrôles.
Exemple : un formulaire contenant un tabcontrol contenant des tabpages contenant des listviews contenant des colonnes
avec comme style de code :
Private Sub InitializeComponent()
Me.TabPage = New System.Windows.Forms.TabControl()
Me.TabPage1 = New System.Windows.Forms.TabPage()
Me.ListFull = New System.Windows.Forms.ListView()
Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
etc ....
Me.TabPage.Controls.Add(Me.TabPage1)
etc ...
Me.TabPage1.Controls.Add(Me.ListFull)
etc ...
Me.ListFull.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2})
etc ...
Me.Controls.Add(Me.TabPage)
etc ...
End Sub
Friend WithEvents TabPage As System.Windows.Forms.TabControl
Friend WithEvents TabPage1 As System.Windows.Forms.TabPage
Friend WithEvents ListFull As System.Windows.Forms.ListView
Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader
Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader
Voila en gros comment cela se construit.
Si l'on veux changer le texte de TabPage1 ou ColumnHeader1 on peut très bien l'appeler directement style:
Nouveau souci, ColumnHeader1 fait parti d'un collection d'un control d'un control d'un control etc etc ...
De plus, au plus on ajoute de controls, au plus c'est lourd a gérer.
Ma question donc est :
Vu que le constructeur créé ces lignes,
Me.TabPage1 = New System.Windows.Forms.TabPage()
Friend WithEvents TabPage1 As System.Windows.Forms.TabPage
Est ce qu'il existe un moyen d'appeler l'un ou l'autre pour accéder aux propriétés de l'objet ?
Me.toutlescontrols("TabPage1").text = "nouveau"
ou
propriété_de_Friend_WithEvents("TabPage1").text = "nouveau"
Mortasgus
Messages postés5Date d'inscriptionjeudi 17 avril 2003StatutMembreDernière intervention28 juin 2010 26 juin 2010 à 02:04
Bonsoir,
L'idée est intéressante et à l'efficacité de marcher mais, car il faut toujours un mais ^^, elle deviens lourde aussi car:
- créé une ou des collections en fonction des controles
- ajout manuel dans le code de col.add pour chaque controle
- fait un directcast en fonction de chaque type
Donc j'ai fait un rapide test et j'ai trouvé ceci :
Dim test As Object = DirectCast(ColumnHeader1, ColumnHeader)
test.text = "test"
ca a l'avantage de ne pas utiliser de collection et de donner le nom et le type seulement
reste a définir deux dim avant car ces noms et valeur, je les recupere au format string
donc :
dim le_nom as quelque_chose = "ColumnHeader1"
dim le_type as autre_chose = "ColumnHeader"
Dim test As Object = DirectCast(le_nom, le_type)
test.text = "test"
a méditer
en attendant une autre réponse, merci a toi d'avoir fait avancer le Schmilblick
Tu peux aussi énumérer tous tes contôles de ta form, rechercher leur type et grâce à cela manipuler ensuite leur propriétés.
For Each element As Control In Me.Controls
't represente le type du controle
Dim t As Type = element.GetType
' t.name est le type sous forme de string
Select Case t.Name
'selon le type du controle tu accede aux bonnes propriétés
Case "Button"
element.Text = "nouveau texte"
Case "ColumnHeader"
element.Width = 500
End Select
Next
Mortasgus
Messages postés5Date d'inscriptionjeudi 17 avril 2003StatutMembreDernière intervention28 juin 2010 28 juin 2010 à 22:03
salut banana
oui, mais non
Seul tabcontrol est un contrôle enfant de Me, donc seul celui-ci ressort ^^
Tabpage1,2,etc ... sont enfants de Tabcontrol
Listview est enfant de tabpage1
etc etc ...
De plus, même en faisant une bouche de recherche d'enfant comme suivant,
Add_ctrl(Me.Controls)
Private Sub Add_ctrl(ByVal lescontroles)
For Each element As Control In lescontroles
If element.HasChildren Then
Add_ctrl(element.Controls)
End If
Next
End Sub
Les colonnes des listview ne ressortent pas. Ce ne sont pas a proprement parler des enfants.
Il y a des idées qui ressortent de ce que tu m'as répondu. Malgré tout, il reste toujours quelques petits détail a régler.
Je te remercie encore pour m'avoir répondu