2013-02-25 16 views
11

sono stato creato pulsanti e textboxs da codifica nel prossimo ciclo, il risultatoCome ottenere la proprietà di controllo con "Nome stringa"?

'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à di testo whene fa clic sul pulsante, posso ottenere proprietà del pulsante quando fai clic come button_1.Name.ToString ma non posso ottenere la proprietà text_1,2,3 .....

faccio qualche trucco con la funzione di divisione button_1.Name.ToString e ottengo 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 oggetto.

Aggiornamento

Ecco il codice che sto utilizzando per caricare i controlli nel circuito:

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 

Update 2

Ecco alcuni codice più:

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 

risposta

21

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

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

Voglio selezionare i controlli in base al nome ("NOME") –

+0

Questo è esattamente ciò che ho dimostrato. Nel mio esempio, il nome della stringa è "" text_1 "'. –

+1

lo so ma quando provo 'MsgBox (text1.Name.ToString)' risultato 'Errore' :(, non riesco a ottenere alcuna proprietà –

0

Il titolo del filo e la tua descrizione del problema a portata di mano sembrano un po 'diverse l'una dall'altra.

Per rispondere alla tua titolo (per trovare un controllo con il suo nome) utilizzare il seguente:

Dim myControlToFind = LayoutRoot.FindName("NAMEOFCONTROL") 

Maggiori informazioni su questo metodo può essere trovato here.

Per rispondere alla descrizione del problema, come (per accedere a un codice generato di controllo dopo che è stato cliccato) effettuare le seguenti operazioni:

Nel ciclo in cui si sta creando il controllo (s) aggiungere il seguente gestore

Addhandler YOURCONTROL.Clicked, AddressOf Textbox_Clicked 

... e poi questo 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 
+0

La tua risposta presuppone WPF. Poiché Hesham non ha mai specificato, * potresti * essere corretto in questa ipotesi, ma io ne dubito. –

+0

In realtà, dato il commento che ha appena aggiunto alla mia risposta, direi che è quasi certo che sta usando WinForms. –

+0

grazie per il tuo tempo ma qui 'Dim tbClicked = Ctype (sender, TextBox)' Voglio sostituire 'sender' con un nome di stringa come' "TEXT_BOX_1" 'perché voglio fare clic su un pulsante, non su una casella di testo. –

7

Come un suggerimento utile veloce da non e, non sembra che tu debba specificare il tipo di controllo all'interno dell'istruzione CType per gli scopi dell'accesso a un controllo sul tuo 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) 

Si noti che, piuttosto che specificare esattamente che tipo di controllo, come ad esempio 'TextBox' o 'pulsante', è semplicemente stato 'controllo'. Questo ti permette di cambiare universalmente qualsiasi tipo di controllo, senza bisogno di specificarne il tipo.

Non riuscivo a trovarlo da nessun'altra parte, quindi ho pensato di condividerlo!

0

Di seguito è riportato il codice.

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

Spero che sia d'aiuto.

0
Dim sometext As TextBox = CType(Me.Controls("sometext "), TextBox) 
+4

Grazie per questo snippet di codice, che potrebbe fornire un aiuto limitato e immediato. Una spiegazione appropriata [migliorerebbe notevolmente] (// meta.stackexchange.com/q/114762) il suo valore a lungo termine mostrando * perché * questa è una buona soluzione al problema e lo renderebbe più utile ai futuri lettori con altre domande simili. Per favore [modifica] la tua risposta per aggiungere qualche spiegazione, incluse le ipotesi che hai fatto. –

Problemi correlati