如何通过"字符串名称"获取控件属性?

14 vb.net string controls object

我已经通过在下一个循环中编码创建了按钮和文本框,结果

'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"
'...
Run Code Online (Sandbox Code Playgroud)

我希望得到文本框属性,当我点击按钮,我可以获得按钮属性点击喜欢button_1.Name.ToString 但我不能得到text_1,2,3 ....属性.

我通过拆分函数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
Run Code Online (Sandbox Code Playgroud)

更新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
Run Code Online (Sandbox Code Playgroud)

Ste*_*art 24

您可以通过Form.Controls属性按名称访问控件,例如:

Dim text1 As TextBox = CType(Me.Controls("text_1"), TextBox)
Run Code Online (Sandbox Code Playgroud)


小智 11

作为一个快速有用的提示,您似乎不必为了访问表单上的控件而在CType语句中指定控件类型.我在尝试访问多种类型的表单控件时遇到过这种情况,例如按钮和文本框,所有这些都使用相同的代码行.

CType(Controls("NAME_OF_CONTROL"), Control)
Run Code Online (Sandbox Code Playgroud)

请注意,您只需声明"控制",而不是准确指定控件的类型,例如"TextBox"或"Button".这允许您通用地更改任何类型的控件,而无需指定其类型.

我在其他地方找不到这个,所以我想我会分享它!


小智 5

下面是代码。

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

我希望它有帮助。