j'ai été créé des boutons et des zones de texte par coding dans la boucle suivante, le résultat
'T(x).Name = "text_1"
'T(x).Name = "text_2"
'T(x).Name = "text_3"
'....
'B(x).Name = "button_1"
'B(x).Name = "button_2"
'B(x).Name = "button_3"
'...
et je veux obtenir la propriété textbox quand je clique sur le bouton, Je peux obtenir la propriété du bouton lorsque vous cliquez comme button_1.Name.ToString
, mais je ne peux pas obtenir la propriété text_1,2,3 .....
je fais une astuce en scindant la fonction button_1.Name.ToString et récupère le dernier numéro .__ et l'ajoute au nom de la zone de texte comme "text_" & button_1.Name.ToString
, mais je ne peux pas convertir cette chaîne en objet.
Mettre à jour
Voici le code que j'utilise pour charger les contrôles dans la boucle:
C_A_TEXT(x) = New TextBox()
C_A_TEXT(x).Dock = System.Windows.Forms.DockStyle.Fill
C_A_TEXT(x).Location = New System.Drawing.Point(270, 5)
C_A_TEXT(x).Margin = New System.Windows.Forms.Padding(0)
C_A_TEXT(x).Size = New System.Drawing.Size(70, 27)
C_A_TEXT(x).TabIndex = 5
C_A_TEXT(x).Name = "NEW_RECHARGE_COUNT_TEXT_" & x
Mise à jour 2
Voici un peu plus de code:
AddHandler C_A_BUTTONS(x).Click, AddressOf C_A_BUTTON
Private Sub C_A_BUTTON(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim thisButton As Button = sender Dim A = CType(Me.Controls("NEW_RECHARGE_COUNT_TEXT_1"), TextBox)
MsgBox(A.Text.ToString) 'Error!
End Sub
Vous pouvez accéder aux contrôles par leur nom via la propriété Form.Controls
, par exemple:
Dim text1 As TextBox = CType(Me.Controls("text_1"), TextBox)
Comme astuce rapide, il ne semble pas nécessaire de spécifier le type de contrôle dans l'instruction CType pour accéder à un contrôle de votre formulaire. Je suis tombé sur cette idée en essayant d'accéder à plusieurs types de contrôles de formulaire, tels que des boutons et des zones de texte, tous avec la même ligne de code.
CType(Controls("NAME_OF_CONTROL"), Control)
Notez que, plutôt que de spécifier exactement le type de contrôle, tel que "TextBox" ou "Button", vous indiquez simplement "Control". Cela vous permet de modifier universellement n'importe quel type de contrôle, sans avoir besoin de spécifier son type.
Je ne pouvais pas le trouver ailleurs, alors j'ai pensé le partager!
Ci-dessous le code.
Dim oObj As Object = Me.Controls.Find("control name", True).FirstOrDefault()
Obj.Property = Value
J'espère que ça aide.
Le titre du fil et votre description du problème semblent un peu différentes les unes des autres.
Pour répondre à votre titre (pour trouver un contrôle par son nom), utilisez ce qui suit:
Dim myControlToFind = LayoutRoot.FindName("NAMEOFCONTROL")
Plus d'informations sur cette méthode peuvent être trouvées ici .
Pour répondre à la description de votre problème en tant que (pour accéder à un contrôle généré par un code après avoir cliqué dessus), procédez comme suit:
Dans la boucle où vous créez le (s) contrôle (s), ajoutez le gestionnaire suivant
Addhandler YOURCONTROL.Clicked, AddressOf Textbox_Clicked
... et ensuite cela gérera l'événement click
Private Sub Textbox_Clicked(sender as object, e as RoutedEventArgs)
Dim tbClicked = Ctype(sender, TextBox)
'You can now access any of the properties of the textbox, for example
Dim txt as String = tbClicked.Text
Dim name as String = tbClicked.Name
Dim height as Double = tbClicked.Height
End Sub
Dim sometext As TextBox = CType(Me.Controls("sometext "), TextBox)