Ответ 1
Вы можете получить доступ к элементам управления по имени с помощью свойства Form.Controls
, например:
Dim text1 As TextBox = CType(Me.Controls("text_1"), TextBox)
В следующем цикле были созданы кнопки и текстовые поля с помощью кодирования результат
'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"
'...
и я хочу получить свойство textbox, когда я нажму кнопку,
я могу получить свойство кнопки, когда нажимаю "button_1.Name.ToString
но я не могу получить свойство text_1,2,3....
Я делаю некоторый трюк с помощью функции split button_1.Name.ToString и получаю последний номер
и добавьте его в текстовое поле, например "text_" & button_1.Name.ToString
, но я не могу преобразовать эту строку в объект.
Обновление
Вот код, который я использую для загрузки элементов управления в цикле:
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
Обновление 2
Вот еще код:
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
Вы можете получить доступ к элементам управления по имени с помощью свойства Form.Controls
, например:
Dim text1 As TextBox = CType(Me.Controls("text_1"), TextBox)
Как быстрый полезный отзыв, вам, похоже, не нужно указывать тип элемента управления в выражении CType для доступа к элементу управления в вашей форме. Я столкнулся с этим при попытке доступа к нескольким типам элементов управления формой, таких как кнопки и текстовые поля, все с одинаковой строкой кода.
CType(Controls("NAME_OF_CONTROL"), Control)
Обратите внимание, что вместо того, чтобы точно определять тип управления, например "TextBox" или 'Button', вы просто указываете "Control". Это позволяет вам универсально изменять любой тип управления, не указывая его тип.
Я не мог найти это где-нибудь еще, поэтому я решил поделиться им!
Название потока и ваше описание проблемы под рукой кажутся немного отличными друг от друга.
Чтобы ответить на ваш заголовок (чтобы найти элемент управления по его названию), используйте следующее:
Dim myControlToFind = LayoutRoot.FindName("NAMEOFCONTROL")
Дополнительную информацию об этом методе можно найти здесь.
Чтобы ответить на описание вашей проблемы как (для доступа к коду, сгенерированному после щелчка) сделайте следующее:
В цикле, в котором вы создаете элемент управления, добавьте следующий обработчик
Addhandler YOURCONTROL.Clicked, AddressOf Textbox_Clicked
... и тогда это будет обрабатывать событие 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 oObj As Object = Me.Controls.Find("control name", True).FirstOrDefault()
Obj.Property = Value
Надеюсь, это поможет.
Dim sometext As TextBox = CType(Me.Controls("sometext "), TextBox)