2013-02-25 11 views
11

i zostały stworzone przyciski i textboxs przez kodowania w następnej pętli wynikiemJak uzyskać kontrolę właściwości za pomocą "nazwy ciągu"?

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

i chcę uzyskać właściwość pola tekstowego whene kliknięciu przycisku mogę dostać nieruchomość przycisk po kliknięciu jak button_1.Name.ToString , ale nie mogę uzyskać własności text_1,2,3 ....

Wykonuję sztuczkę za pomocą przycisku split function_1.Name.ToString i zdobądź ostatni numer i dodaj go do nazwy pola tekstowego, np. "text_" & button_1.Name.ToString, ale nie mogę przekonwertować tego ciągu na obiekt.

Aktualizacja

Oto kod używam załadować formantów w pętli:

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

Oto kilka Kod:

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 

Odpowiedz

21

Możesz uzyskać dostęp do elementów sterujących wg nazwy za pośrednictwem właściwości Form.Controls, na przykład:

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

chcę wybrać kontrole Stinga nazwa („nazwa”) –

+0

To jest dokładnie to, co wykazano. W moim przykładzie nazwa ciągu to '" text_1 "'. –

+1

wiem, ale kiedy próbuję 'MsgBox (text1.Name.ToString)' result 'Błąd' :(, Nie mogę uzyskać żadnej właściwości –

0

Tytuł wątku i opisie problemu pod ręką wydawać się nieco różnią się od siebie.

Aby odpowiedzieć na tytuł (znaleźć kontroli przez jego nazwy) użyć następujących:

Dim myControlToFind = LayoutRoot.FindName("NAMEOFCONTROL") 

Więcej informacji na temat tej metody można znaleźć here.

Aby odpowiedzieć opis Twojego problemu jako (aby uzyskać dostęp do kodu generowane kontrolę po kliknięciu) wykonaj następujące czynności:

W pętli, gdzie tworzysz kontrolę (y) Dodaje się następującą procedurę obsługi

Addhandler YOURCONTROL.Clicked, AddressOf Textbox_Clicked 

... i wtedy to będzie obsługiwać zdarzenie 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

Twoja odpowiedź zakłada przyjęcie WPF. Ponieważ Hesham nigdy tego nie sprecyzował, możesz * być * poprawny w tym założeniu, ale raczej wątpię w to. –

+0

Właściwie, biorąc pod uwagę komentarz, który właśnie dodałem do mojej odpowiedzi, powiedziałbym, że jest prawie pewne, że używa WinForm. –

+0

dziękuję za poświęcony czas, ale tutaj 'Dim tbClicked = Ctype (nadawca, TextBox)' chcę zastąpić 'nadawca' jakąś nazwą napisu jak' "TEXT_BOX_1" 'ponieważ chcę kliknąć przycisk a nie pole tekstowe. –

7

Jako szybki użytecznego końcówki nie e, wydaje się, że nie musisz określać typu kontroli w instrukcji CType w celu uzyskania dostępu do formantu w formularzu. Natknąłem się na to, próbując uzyskać dostęp do wielu typów kontrolek formularzy, takich jak przyciski i pola tekstowe, wszystkie z tym samym wierszem kodu.

CType(Controls("NAME_OF_CONTROL"), Control) 

zauważyć, że zamiast określając dokładnie, jaki rodzaj kontroli, takich jak „TextBox” lub „przycisk”, po prostu stan „kontrola”. Pozwala to na uniwersalną zmianę dowolnego rodzaju kontroli bez konieczności określania jej typu.

Nie mogłem znaleźć tego nigdzie indziej, więc pomyślałem, że będę je udostępniać!

0

Poniżej znajduje się kod.

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

Mam nadzieję, że pomoże.

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

Dziękujemy za ten fragment kodu, który może zapewnić ograniczoną, natychmiastową pomoc. Właściwe wyjaśnienie znacznie poprawi (// meta.stackexchange.com/q/114762) jego długoterminową wartość, pokazując * dlaczego * jest to dobre rozwiązanie problemu i sprawiłoby, że byłby bardziej przydatny dla przyszłych czytelników z inne, podobne pytania. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienia, w tym założenia, które podjąłeś. –

Powiązane problemy