Как ссылаться на элемент управления переменной в форме переменной из другой формы?Нужно получить кнопку. Тег переименован в запущенную программу - PullRequest
0 голосов
/ 20 февраля 2019

Вот моя проблема: У меня есть форма с древовидной структурой.В этом древовидном представлении отображаются все:

  • другие формы в моем проекте как родители
  • все имена кнопок как дочерние
  • все кнопки как дочерние элементы имен кнопок.

Когда я выбираю имя кнопки в древовидной структуре, у меня есть выбор, представленный в виде (текстовое поле 1 с именем кнопки) (текстовое поле 2 с кнопкой) (текстовое поле 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 голосов
/ 20 февраля 2019

Я думаю, что здесь есть две основные проблемы:

  1. Ваш цикл For Each ctrl As Control In Controls не выполняет итерации по элементам управления в другом объекте формы, указанном в переменной frm.Свойство Controls будет по умолчанию соответствовать набору элементов управления этой формы, а не frm.Controls.
  2. Похоже, вы пытаетесь изменить Tag в определении этого класса во время выполнения.Это невозможно, AFAIK, особенно в том, что вы пытаетесь здесь.Каждый раз, когда вы создаете новый экземпляр этого объекта формы, вы собираетесь инициализировать этот объект так, как он был скомпилирован.Вы можете изменить Tag значения запущенного экземпляра объекта, но вы не можете изменить default значения класса без использования такой техники, как внедрение зависимостей .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...