这是我的问题: 我有一个带有树视图的表单。 该树视图显示了所有内容:
当我在树状视图中选择一个按钮名时,我的选择显示为 (带有按钮名的textbox1) (带有buttontag的textbox2) (文本框3的格式名称)
我有1个要手动填充的空白文本框,用于从树状视图中选择的按钮更新按钮标签。
无论哪种方式,我尝试过的所有代码都不会更新任何内容。
到目前为止,这是代码,但似乎不起作用...
我的代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim asm = System.Reflection.Assembly.GetExecutingAssembly
Dim myTypes As Type() = asm.GetTypes()
Dim frm As Form
For Each t As Type In myTypes
If t.IsSubclassOf(GetType(System.Windows.Forms.Form)) AndAlso TextBox1.Text = t.Name Then
frm = CType(Activator.CreateInstance(t), Form)
frm.Hide()
Dim thisButtonName As String = TextBox3.Text ' This is the name of the button I'm looking for
Dim thisButtonName2 As String = TextBox2.Text ' this is the new tag name for that button
' Loop all controls in this form
For Each ctrl As Control In Controls
' Is this control a button
If TypeOf (ctrl) Is Button Then
' Is this the correct button
If CType(ctrl, Button).Name = thisButtonName Then
CType(ctrl, Button).Tag = thisButtonName2
End If
End If
Next
End If
Next
TreeView1.Nodes.Clear()
For Each formprop In My.Forms.GetType.GetProperties
Dim node = Me.TreeView1.Nodes.Add(formprop.Name)
Dim form As Form = CType(formprop.GetValue(My.Forms, Nothing), Form)
ControlsTree(node, form.Controls)
Next
End Sub
答案 0 :(得分:0)
我认为这里有两个基本问题:
For Each ctrl As Control In Controls
不会迭代frm
变量引用的其他表单对象中的控件。 Controls
属性将默认为此表单的控件集,而不是frm.Controls
。Tag
。 AFAIK不可能做到这一点,尤其是您在此处尝试的情况。每次创建该表单对象的新实例时,都将将该对象初始化为它的编译方式。您可以更改对象正在运行的实例的Tag
值,但是如果不使用类似dependency injection的技术就不能更改类的default
值。