[英]C# event distribution
我有一個帶模塊/可停靠子表單的WinForm(WeifenLuo)。 在表單之間傳遞事件/信息的最佳做法是什么?
例如:我希望SubForm1中的“SelectionChanged”事件更改SubForm2中突出顯示的內容。 問題是,可能沒有SubForm2-Tabs,一個或多個實例。
目前,如果用戶請求新的SubForm實例,則調用這樣的函數:
private void toolStripMenuItemSubForm1_Click(object sender, EventArgs e)
{
SubForm1 subForm1 = new SubForm1();
subForm1.Show(dockPanelMain, DockState.Document);
}
除了dockPanelMain.Contents
之外,MainForm沒有所有子dockPanelMain.Contents
記錄。
編輯:我知道表單如何相互交互以及事件本身如何工作。 我的問題是來自SubForm1的事件可以改變不同的其他子表單,但它們可能不存在於給定的時間點,或者可能存在多個實例,我不希望通過MainForm為每個單個事件鏈接它。
恕我直言,你采取了錯誤的方式
一位老師過去常常以這種方式向我提出這樣的問題:“首席執行官並不一定知道每個為他工作的人。但是,每個工人都會知道它的首席執行官”(原諒這句話,它是(草率地)翻譯過來的)
這也可以應用於您的問題:
將父實例傳遞給將負責保留此實例的子項,並將其存入他們應該監聽的事件中。
這樣,你的父班只需要照顧好事件,孩子們就會做更新自己的工作
編輯:
要在dockpanel的內容類之間工作,它基本上是一回事。
將dockpanel的Contents
屬性傳遞給子類。 由於它是一個集合(因此也是一個引用類型),子類總是可以訪問集合的最新“版本”。
您只需要通過過濾此集合來獲取您感興趣的所有實例
過濾示例(我可能在最后錯過了演員表):
IEnumerable<SubForm2> sf2 = dockContents.Where(sf => sf is SubForm2)
我建議將包含事件/委托的Event類傳遞給Subform構造函數。 每個子表單都可以訂閱在適當的時間引發的事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.