根据您对return a value
and的要求call a procedure on the calling form
,我认为最好的解决方案是使用Events
. 我将通过一个简单的例子来展示这个概念。
对于此示例,假设您有 aParent Form
和 a Child Form
,并且每个表单都有 aButton
和 a TextBox
。
- 单击父窗体上的按钮将生成一个子窗体并订阅其 ValueChanged 事件。
- 单击子窗体上的按钮将引发一个事件,并将其 TextBox 的值传递给订阅该事件的任何人。
这是代码Parent Form
:
Public Class ParentForm
Private Sub ParentButton_Click(sender As System.Object, e As System.EventArgs) Handles ParentButton.Click
Dim child As New ChildForm
AddHandler child.ValueChanged, AddressOf ChildFormValueChanged
child.Show()
End Sub
Private Sub ChildFormValueChanged(ByVal NewValue As String)
ParentTextBox.Text = NewValue
End Sub
End Class
这是代码Child Form
:
Public Class ChildForm
Public Event ValueChanged(ByVal NewValue As String)
Private Sub ChildButton_Click(sender As System.Object, e As System.EventArgs) Handles ChildButton.Click
RaiseEvent ValueChanged(ChildTextBox.Text)
End Sub
End Class
AddHandler
代码很重要——它将允许,Parent Form to subscribe to the Child Form's ValueChanged Event
和specify a procedure to execute when the event has fired
. 在这种情况下,您将看到每当触发 ValueChanged 事件时,父文本框的值将等于子文本框的值(在此示例中,当单击子按钮时会发生这种情况)。
您可以在 Event 声明中放置多个参数以及任何数据类型,但您只需要确保在引发它时执行的过程(即 ChildFormValueChanged)与 Event 具有相同的签名(期望相同的参数和数据类型)。