2013-02-25 7 views
11

i Buttons und textboxs wurden von Codierung in der nächsten Schleife erstellt, das ErgebnisWie Steuerelementeigenschaft von "String Name" erhalten?

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

und ich will Textbox Immobilie erhalten whene i die Schaltfläche klicken, können i-Taste Eigenschaft erhalten, wenn wie button_1.Name.ToString klicken aber ich kann nicht die Eigenschaft text_1,2,3 .... bekommen.

Ich mache einen Trick von Split-Funktion button_1.Name.ToString und bekomme die letzte Nummer und fügen Sie es in den Textfeldnamen wie "text_" & button_1.Name.ToString, aber ich kann diese Zeichenfolge in Objekt konvertieren.

aktualisieren

Hier ist der Code, den ich mit den Kontrollen in der Schleife laden:

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

Hier einige weitere 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 

Antwort

21

Sie können die Steuerelemente über den Namen zugreifen über die Form.Controls Eigenschaft, zum Beispiel:

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

ich will Steuerelemente auszuwählen namentlich Stachel („NAME“) –

+0

, dass genau das, was ich unter Beweis gestellt. In meinem Beispiel lautet der Name der Zeichenfolge "text_1". –

+1

ich weiß, aber wenn ich 'MsgBox (text1.Name.ToString) versuchen' Ergebnis 'Fehler' :(, Ich kann keine Eigenschaft. –

0

Der Titel des Themas und Ihre Beschreibung des Problems auf der Hand scheinen ein wenig voneinander unterscheiden.

Um Ihre Titel beantworten verwenden Sie die folgende (eine Kontrolle durch seinen Namen zu finden):

Dim myControlToFind = LayoutRoot.FindName("NAMEOFCONTROL") 

Weitere Informationen zu diesem Verfahren here gefunden werden kann.

die Beschreibung Ihrer Frage zu beantworten, wie (ein Code für den Zugriff auf erzeugte Steuer, nachdem er angeklickt wird) wie folgt vor:

In der Schleife, wo Sie die Kontrolle erstellen (s) fügen Sie den folgenden Handler

Addhandler YOURCONTROL.Clicked, AddressOf Textbox_Clicked 

... und dann wird dies das Click-Ereignis

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

Ihre Antwort geht von WPF aus. Da Hesham nie spezifiziert hat, magst du in dieser Annahme richtig sein, aber ich bezweifle es eher. –

+0

Tatsächlich, angesichts des Kommentars, den er gerade zu meiner Antwort hinzugefügt hat, würde ich sagen, dass es ziemlich sicher ist, dass er WinForms verwendet. –

+0

danke für Ihre Zeit, aber hier 'Dim tbClicked = Ctype (Absender, TextBox)' Ich möchte ersetzen 'sender' zu einem String-Namen wie '" TEXT_BOX_1 "' weil ich auf eine Schaltfläche nicht ein Textfeld klicken möchte. –

7

Als schnellen nützlichen Tipp Griff nicht zu e, Sie scheinen die Art des Steuerelements in der CType-Anweisung nicht anzugeben, um auf ein Steuerelement in Ihrem Formular zugreifen zu können. Ich bin darauf gestoßen, als ich versuchte, auf verschiedene Arten von Formularsteuerelementen zuzugreifen, z. B. Schaltflächen und Textfelder, alle mit der gleichen Codezeile.

CType(Controls("NAME_OF_CONTROL"), Control) 

zu beachten, dass, anstatt die Angabe genau, welche Art von Kontrolle, wie ‚TextBox‘ oder ‚Button‘, du einfach Zustand ‚Control‘. Auf diese Weise können Sie jeden Steuerelementtyp universell ändern, ohne seinen Typ angeben zu müssen.

Ich konnte das nirgendwo anders finden, also dachte ich, ich würde es teilen!

0

Unten ist der Code.

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

Ich hoffe, es hilft.

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

Vielen Dank für dieses Code-Snippet, das möglicherweise eine begrenzte, sofortige Hilfe bietet. Eine angemessene Erklärung [würde erheblich verbessern] (// meta.stackexchange.com/q/114762) ist ihr langfristiger Wert, indem sie zeigt * warum * das ist eine gute Lösung für das Problem, und würde es für zukünftige Leser mit mehr nützlich machen andere, ähnliche Fragen. Bitte [bearbeiten] Sie Ihre Antwort, um einige Erklärungen hinzuzufügen, einschließlich der Annahmen, die Sie getroffen haben. –