如何从另一个表单引用变量表单上的变量控件?需要获取按钮。正在运行的程序中重命名了标签

时间:2019-02-20 14:37:38

标签: vb.net winforms variables controls

这是我的问题: 我有一个带有树视图的表单。 该树视图显示了所有内容:

  • 我作为父母的项目中的其他形式
  • 所有按钮名称均为孩子
  • 所有按钮标签作为按钮名称的子代。

当我在树状视图中选择一个按钮名时,我的选择显示为 (带有按钮名的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

1 个答案:

答案 0 :(得分:0)

我认为这里有两个基本问题:

  1. 您的循环For Each ctrl As Control In Controls不会迭代frm变量引用的其他表单对象中的控件。 Controls属性将默认为此表单的控件集,而不是frm.Controls
  2. 似乎您正在尝试在运行时更改该类的定义中的Tag。 AFAIK不可能做到这一点,尤其是您在此处尝试的情况。每次创建该表单对象的新实例时,都将将该对象初始化为它的编译方式。您可以更改对象正在运行的实例的Tag值,但是如果不使用类似dependency injection的技术就不能更改类的default值。