2011-04-14 60 views
0

添加如果我有下面的表單控件之間自定義事件:
Screenshot here
Windows窗體:接線,在運行時

形式有多個用戶控件(橙色)也至極包含多個用戶控件(綠色)。我的問題是:
1)如果我爲'orange'用戶控件之一添加一個額外的'綠色'用戶控件,將這個新的'綠色'用戶控件連接到Button事件的最佳方式是什麼在主窗體上(沒有'橙色'或'綠色'用戶控件知道主窗體)?
我認爲從'orange'用戶控件將事件從'green'usercontrol作爲參數觸發到主窗體,然後處理主窗體中的佈線。

2)有沒有「地方」來處理這種佈線?

3)如果所有的'綠色'用戶控件需要連接到彼此的事件(例如,如果其中一個值發生變化,所有其他的都需要通知),那麼最好的方法是什麼?我想過創建一個單例類EventManager來處理這個問題?

我真的很苦惱與鬆散耦合的usercontrols的組合,並接線他們。

我希望我的問題很清楚。

由於提前, 凱文

+0

AVG告訴我,您的imageshack鏈接中有些東西不好用。我相信這不是你的錯,但是嘿,夥計,小心點。假陽性? – Marco 2011-04-14 08:02:03

回答

0

這是我想到的方式,任何控制/類應該是負責配置本身及其直接孩子的公共接口。類或控件的用戶不應該需要任何關於它的父項或其子項的任何內部知識的知識。

因此,在您的示例中,橙色控件應該訂閱綠色控件事件並採取相應行動,或許可以將自己的事件提升給父母,或者可能會影響兄弟綠色控件上的某個字段。當綠色控制器被添加並從橙色中移除時,橙色控制器負責維持其內部「接線」。這是真的,無論這是發生在橙色的公共還是私人方法中,如果主機能夠通過一些暴露的橙色集合來實現這一點,那麼這樣做的邏輯必須以橙色封裝。

無論我們認爲是橙色,主人,綠色還是其他任何階層/控制人,這句話都是同樣真實的。

在編碼方面,當添加和刪除控件時,您希望將+=-=與Multicast Delegate \ Event訂閱服務器模型結合使用。處理程序將被正確編碼。

+0

因此,如果我理解的很好,我應該在綠色和橙色的用戶控件中創建一個事件ValueChanged,並讓主窗體訂閱橙色的ValueChanged事件,並讓橙色訂閱綠色的ValueChanged事件。
一旦綠色的值發生變化,橙色將被通知,然後可以將他的ValueChanged事件提升到主窗體? 一旦發生這種情況,告知其他橙色cusercontrols的最佳方式是什麼?直接通過公共方法,或通過事件。 (在第二種情況下,我應該在哪裏接線?將主表單傳遞給橙色,以便橙色可以自行連接?)謝謝 – Muke 2011-04-14 11:29:11

相關問題