web-dev-qa-db-fra.com

Comment obtenir une propriété de contrôle par "Nom de chaîne"?

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
13
user1831408

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)
25
Steven Doggart

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!

9
Timothy

Ci-dessous le code.

Dim oObj As Object = Me.Controls.Find("control name", True).FirstOrDefault()
Obj.Property = Value

J'espère que ça aide.

3
jmvd70

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
0
freschx
Dim sometext As TextBox = CType(Me.Controls("sometext "), TextBox)
0
Muhammad Saeed