簡體   English   中英

用戶控件中的vb.net winform調用父窗體上的函數

[英]vb.net winform from a usercontrol call a function on the parent form

我不知道如何正確設置,但是我有一個vb.net winform應用程序,我想在其中使用customcontrol,以便可以在多種表單上重復使用邏輯。 我知道如何從父級(使用控件中的屬性)在此控件中設置值。 但是現在我想在父窗體上調用一個specifiek函數。 我的情況是LoadData()這是父窗體的過程。 我怎樣才能做到這一點?

我知道我可以在用戶控件中使用Me.ParentForm來引用父窗體。 但是我不能在父窗體中調用LoadData()過程。

有什么幫助嗎? 這是一個winforms應用程序,而不是ASP.NET應用程序。

TIA

[編輯]我可以使用這里找到的示例來解決我的問題。 這很好

首先, UserControl用於重用GUI邏輯,所以我希望這就是您的意思。 如果嘗試重用非GUI邏輯,則可能需要為此創建一些獨立的類。

其次,以您描述的方式回調到父窗體通常是不好的設計,因為它使UserControl可重用性降低,並且在兩者之間創建了過於緊密的綁定。 您應盡可能將數據下推到UserControl

如果您找不到讓Form向下推送數據的方法(也許是因為它基於UserControl的UI交互),則您還有其他幾個選擇。 首先是將數據加載行為包裝到一個對象中,該對象可以在初始化期間傳遞給UserControl ,並且UserControl可以根據需要訪問其上的LoadData方法。 另一種方法是讓UserControl定義一組事件,這些事件可用於從表單中請求外部數據。 我喜歡在此類事件上使用“查詢”前綴。 因此,當在UserControl上點擊獲取按鈕時,它會引發“ QueryData”事件,並且處理該事件的表單將通過填充屬於自定義EventArgs某種數據容器來響應。

如果您需要更多幫助,可以擴展這兩種方法。


重新閱讀問題后,我看來我的方法已被淘汰。 我的印象是LoadData是Form中的一種將數據加載到UserControl中的方法。 如果這只是一個簡單的調用,則將注意力集中在答案的事件部分,而忽略數據容器部分。

我會向您的控件添加一個事件,並以該控件所屬的形式對其進行處理。

在您的控制中,輸入以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM