根據您的要求,既return a value
和call a procedure on the calling form
,我認爲最好的辦法是使用Events
。我將通過一個簡單的例子來展示這個概念。
對於這個例子,假設你有一個Parent Form
和Child Form
,並且每種形式都有一個Button
和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事件被觸發時,您將看到Parent TextBox值等於Child TextBox的值(在此示例中,這發生在單擊Child's Button時)。
你可以在你的Event聲明和任何數據類型中放置多個參數,但是你只需要確保當它被引發時執行的過程(即ChildFormValueChanged)與Event具有相同的簽名(期望相同參數和數據類型)。
將其轉換爲正確的類型(使用TryCast)。你可以使用一個接口,每一個可以啓動這個搜索器的表單都可以實現。 – Styxxy 2013-04-07 14:28:43
我會怎樣嘗試投射,「Me.Owner」已經是一種表單類型? – bendataclear 2013-04-07 14:30:13
因爲'System.Windows.Forms.Form'沒有你的方法,所以你必須把它轉換成正確的類型(它有這個方法)。 – Styxxy 2013-04-08 09:57:50