0

我正在尝试从一个单独的类修改应用程序启动表单上的控件,该类是从启动表单中按钮的事件处理程序实例化的。

这是主窗体中的点击监听器:

Sub Button1Click(sender As Object, e As EventArgs)
    Dim changer As New Changer()
    changer.dochange

End Sub

这是类转换器:

Public Class Changer
Sub dochange
    'ignore this part
    Dim window As Form1
    window = New Form1()
    window.Show

          'this is where i have a problem:
    Dim bunz As MainForm
    bunz = New MainForm()
    bunz.label1.Text = "sometext"
End Sub
 End Class

我什至设置了我的 label1 以便它是公开的,但文本仍然不会改变。怎么了?

4

3 回答 3

2

您遇到的问题是因为您正在创建第二个 Mainform 并更改第二个而不是原始的标签文本。您需要做的是为您的 Changer Class 创建一个事件并在 MainForm 中订阅它并使用它来更改标签的 Text

正文

Public Class MainForm

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim changer As New Changer()
        AddHandler changer.ChangeText, AddressOf ChangeTextHandler
        changer.dochange()
    End Sub

    Private Sub ChangeTextHandler(value As String)
        Label1.Text = value
    End Sub

End Class

换班

Public Class Changer
    Public Event ChangeText(value As String)
    Sub dochange()
        'ignore this part
        Dim window As Form1
        window = New Form1()
        window.Show()
        RaiseEvent ChangeText("SomeText")
    End Sub
End Class
于 2012-12-07T05:29:37.047 回答
1

这正是我想要的。我想从另一个班级清除表格上的状态条标签。在表单中我添加了 AddHandler otherClass.ChangeText、AddressOf ChangeTextHandler 和子 ChangeTextHandler。在 otherClass 我做了 RaiseEvent ChangeText(" ") 并且它起作用了。谢谢你!谢谢你!有一件事,我一直对共享的访问感到温暖......将被忽略。我将事件定义为 Public Shared Event ChangeText(value As String) 并且没有更多问题。很高兴这里有一些非常聪明的人。

于 2012-12-10T17:18:19.217 回答
1

下面的代码示例应该可以工作。在 VB 中,您并不总是需要显式声明或引用您尝试修改的表单。如果它已作为主窗体打开或使用 Shared ShowDialog 方法打开,那么您可以在这种情况下将 Label1 引用为窗体的共享属性。无需创建单独的实例。

Public Class MainForm
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim changer As New Changer()
        changer.dochange()
    End Sub
End Class

Public Class Changer
    Sub dochange()
        'ignore this part
        Dim window As Form1
        window = New Form1()
        window.Show()

        'this is where i have a problem:
        MainForm.Label1.Text = "sometext"
    End Sub
End Class

以上是在两个单独的文件中,一个是通过添加 Windows 窗体从 Visual Studio 创建的 MainForm.vb 文件,另一个是通过添加类创建的。

于 2012-12-07T03:14:47.373 回答