Come ottenere la proprietà di controllo con “String Name”?

Sono stati creati pulsanti e caselle di testo codificando nel prossimo ciclo, il risultato

'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" '... 

e voglio ottenere la proprietà della casella di testo quando clicco sul pulsante, posso ottenere la proprietà del pulsante quando clicco come button_1.Name.ToString ma non posso ottenere la proprietà text_1,2,3 …..

faccio qualche trucco con la funzione split button_1.Name.ToString e ottieni l’ultimo numero e lo aggiungo al nome della casella di testo come "text_" & button_1.Name.ToString ma non riesco a convertire questa stringa in object.

Aggiornare

Ecco il codice che sto usando per caricare i controlli nel loop:

 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 

Aggiornamento 2

Ecco un altro codice:

 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 

È ansible accedere ai controlli per nome tramite la proprietà Form.Controls , ad esempio:

 Dim text1 As TextBox = CType(Me.Controls("text_1"), TextBox) 

Come suggerimento utile da notare, non sembra che sia necessario specificare il tipo di controllo all’interno dell’istruzione CType per gli scopi di accesso a un controllo sul modulo. Mi sono imbattuto in questo quando provo ad accedere a più tipi di controlli dei moduli, come pulsanti e caselle di testo, tutti con la stessa linea di codice.

 CType(Controls("NAME_OF_CONTROL"), Control) 

Nota che, piuttosto che specificare esattamente quale tipo di controllo, come “TextBox” o “Button”, devi semplicemente indicare “Control”. Questo ti permette di cambiare universalmente qualsiasi tipo di controllo, senza bisogno di specificarne il tipo.

Non sono riuscito a trovarlo da nessun’altra parte, quindi ho pensato di condividerlo!

Di seguito è riportato il codice.

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

Spero possa essere d’aiuto.

Il titolo del thread e la descrizione del problema in questione sembrano leggermente diversi l’uno dall’altro.

Per rispondere al tuo titolo (per trovare un controllo con il suo nome) usa il seguente:

 Dim myControlToFind = LayoutRoot.FindName("NAMEOFCONTROL") 

Maggiori informazioni su questo metodo possono essere trovate qui .

Per rispondere alla descrizione del problema come (per accedere a un controllo generato dal codice dopo aver fatto clic su di esso), effettuare le seguenti operazioni:

Nel ciclo in cui si sta creando il / i controllo / i, aggiungere il seguente gestore

 Addhandler YOURCONTROL.Clicked, AddressOf Textbox_Clicked 

… e quindi gestirà l’evento 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)