我试图从一个单独的类修改应用程序启动表单上的控件,该类是从启动表单中的按钮事件处理程序实例化的。
这是主窗体中的点击监听器:
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以便公开,但文字仍然没有改变。怎么了?
答案 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(值为字符串),而不再是问题。很高兴这里有一些非常聪明的人。