Как хранить ссылки на разные формы с одной переменной - PullRequest
0 голосов
/ 09 апреля 2020
  • У меня есть форма (с именем Form1), которая имеет фиксированный размер и некоторые элементы управления.
  • Я создала другую форму (с именем Form2), которая является копией формы Form1, с той лишь разницей, что фиксированный размер.
  • Я создал форму "SharedForm", которая содержит подпрограммы и функции, используемые обеими формами (поэтому мне не нужно писать их для каждой из них).

Моя проблема: Я не знаю, как сохранить ссылку для любой формы (только по одной за все время).

Если я объявлю переменную FormRef как Form, я получу ошибка, что "label1 не является членом формы". (В противном случае, если я объявлю как Form1 или Form2, он будет работать нормально, но, конечно, только для одной формы)


SharedForm выглядит следующим образом:

enter image description here

Public Class SharedForm

    Public Shared FormRef As Form 'problem is here

    Private Sub SharedForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        FormRef = New Form2
        FormRef.Show()
    End Sub

    Public Shared Sub Button1_Click(sender As Object, e As EventArgs)
        FormRef.Label1.Text = "test"
    End Sub

End Class

Форма 1 и Форма 2 таковы.

enter image description here enter image description here

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler Button1.Click, AddressOf SharedForm.Button1_Click
    End Sub
End Class

Public Class Form2
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler Button1.Click, AddressOf SharedForm.Button1_Click
    End Sub
End Class

1 Ответ

0 голосов
/ 11 апреля 2020

Просто класс, а не форма.

Public Class EventCode
    Public Shared Sub Button1Click(Sender As Form)
        Dim frm As Form = Nothing
        If Sender.Name = "Form1" Then
            frm = DirectCast(Sender, Form1)
        ElseIf Sender.Name = "Form2" Then
            frm = DirectCast(Sender, Form2)
        End If
        frm.Controls("Label1").Text = "Hello World"
    End Sub
End Class

В форме 1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    EventCode.Button1Click(Me)
End Sub

Надпись на форме 1 показывает «Hello World»

В форме 2

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    EventCode.Button1Click(Me)
End Sub

Метка на форме Form2 показывает «Hello World»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...