从外部类设置文本值

时间:2012-12-07 02:55:59

标签: .net vb.net

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

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

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

我甚至设置了我的标签1以便公开,但文字仍然没有改变。怎么了?

3 个答案:

答案 0 :(得分:2)

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

<强>的mainText

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

Changer 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

答案 1 :(得分: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文件,另一个是添加类。

答案 2 :(得分:1)

这正是我所寻找的。我想在另一个类的formn上清除状态条标签。在表单中我添加了AddHandler otherClass.ChangeText,AddressOf ChangeTextHandler和子ChangeTextHandler。在otherClass中,我做了RaiseEvent ChangeText(“”)并且它有效。谢谢!谢谢!有一件事,我一直对获取共享的热情......将被忽略。我将事件定义为公共共享事件ChangeText(值为字符串),而不再是问题。很高兴这里有一些非常聪明的人。