2013-09-26 54 views
0

我不知道如何把它放正確,但我有一個vb.net winform應用程序,我想在其中使用自定義控件,使用多種形式的邏輯。我知道如何在父控件中使用此控件中的值(使用控件中的屬性)。但是現在我想在父窗體上調用一個指定函數。 Im我的情況LoadData()這是一個父窗體的過程。我怎樣才能做到這一點?vb.net winform從一個用戶控件調用父窗體上的一個函數

我知道我可以通過在usercontrol中使用Me.ParentForm來引用父窗體。但我無法在父窗體中調用LoadData()過程。

任何幫助?這是一個winforms應用程序,而不是ASP.NET應用程序。

T.I.A.

[編輯] 我可以使用this例如在這裏找到的例子來解決我的問題。這是工作正常

+0

嘗試使用MyBase.LoadData() –

回答

0

首先,UserControl是用於重用GUI邏輯,所以我希望這就是你的意思。如果您試圖重用非GUI邏輯,您可能需要爲此創建一些獨立類。其次,一般來說設計不好,因爲它會使得UserControl的可重用性降低,並且會在兩者之間產生過於緊密的綁定,因此以您描述的方式回調到父窗體通常是不好的設計。您應該儘可能將數據向下推入UserControl

如果您找不到表單推送數據的方法(可能是因爲它基於UserControl中的UI交互),那麼您還有其他選項。首先是將數據加載行爲合併到可在初始化過程中傳遞給UserControl的對象,並且UserControl可根據需要訪問LoadData方法。另一種方法是讓UserControl定義一組可用於從表單請求外部數據的事件。我喜歡在這些事件上使用「查詢」前綴。因此,當您的UserControl上點擊獲取按鈕時,它會引發「QueryData」事件,並且處理該事件的表單會通過填充屬於自定義EventArgs的某種數據容器進行響應。

如果您需要更多幫助,其中任何一項都可以擴展。


在重新閱讀這個問題時,我看起來可能是我的方法已經結束了。我的印象是,LoadData是在將數據加載到UserControl中的Form中的一種方法。如果它只是一個簡單的調用,然後專注於我的答案的事件部分,並忽略數據容器部分。

+0

THX tcarvin,我理解重用。這就是我使用它的原因。這個控件在這個項目中用在我的很多表單中。而邏輯保持不變。 – Stephan

+0

對不起,只是確認。儘管我的答案的其餘部分適用於UserControl。讓我知道是否有任何問題。 – tcarvin

0

我會添加一個事件給你的控件,並在控件所屬的窗體上處理它。

在你的控制,這樣的事情:

Public Event LoadData(ByVal sender As Object, ByVal e As System.EventArgs) 

而且在你的表格,你可以有這樣的事情:

Private Sub UserControl1_LoadData(sender As Object, e As EventArgs) Handles UserControl1.LoadData 
    '...Your code here 
End Sub 
相關問題