我试图更改Form1
中标签的文字,表单中包含以下内容:
Private Sub BKW_DoWork(sender As Object, e As DoWorkEventArgs) Handles BKW.DoWork
MyFunction() ' This function is located in the class 'General function
End Sub
在同一Form1
我也有:
Private Delegate Sub UpdateLabelDel(ByVal txt As String)
Public Sub UpdateLabel(ByVal txt As String)
If Me.InvokeRequired Then
Invoke(New UpdateLabelDel(AddressOf UpdateLabel), txt)
Else
Label1.Text = txt
End If
End Sub
在GeneralFunction
类中的我有这段代码来更改文本标签:
Dim frm As New Form1
frm.UpdateLabel("Starting function")
如何看到我从名为MyFunction()
的{{1}}致电BackGroundWorker
,此功能使用Form1中的BKW
更新文本。问题是位于同一Form1中的.UpdateLabel
不会更改任何文本,有什么问题?
答案 0 :(得分:1)
这会创建一个新表单:
Dim frm As New Form1
因此,您不会更改所看到的表单上的文本,而是在未显示的完全独立的表单上进行更改。
相反,将对当前表单的引用传递给需要它的代码。像这样:
MyFunction(Me)
函数签名会期望引用,如下所示:
Public Sub MyFunction(ByVal form As Form1)
在该函数中,您可以从该变量引用表单实例:
form.UpdateLabel("Starting function")
基本上,如果你有需要引用对象的代码(类,方法等),调用它的代码应该为它提供引用。