2008-10-24 47 views
2

我必須重寫從Panel的Panel控件擴展的myControl的「Controls」屬性的Add方法。爲此,我將ControlCollection類擴展到了MyControlCollection中,我重寫了它的Add方法。現在我聲明瞭MyControlCollection類型的Controls屬性來隱藏面板的Controls屬性。當我訪問this.Controls.Add(控件)時,它引用overriden Add方法。但是,如果我拖拽並在myControl上放置一個控件,行爲是基本類型的Add方法。任何機構能否提出這個問題的原因和解決辦法?提前致謝。C#中面板的覆蓋控件屬性

回答

1

原因是設計者調用Control.Controls而不是訪問您的單獨集合。說實話,你的解決方案聽起來像註定會引起麻煩 - 隱藏成員通常會這樣做。

你想達到什麼目的?它看起來不像ControlCollection中有一個很好的事件,但可能有不同的方法來解決這個問題。

編輯:我剛剛看到Control有一個ControlAdded事件 - 會訂閱那對你來說足夠嗎?

+0

我必須根據某些屬性限制在myControl中添加控件。 ControlAdded在位置0,0處的父級添加新控件後觸發。之後它將控制權重定位到期望的位置。如果我從ControlAdded的EventHandler中的父級中刪除該新控件,則會發生異常。 – Lalit 2008-10-24 13:15:53

3

您可以改爲覆蓋CreateControlCollection函數,並返回您選擇的類的實例,該實例繼承System.Web.UI.ControlCollection。 從您的類中移除Controls屬性,您不需要覆蓋或隱藏原始實現。

+0

哦,很好 - 我沒有意識到這一點。我想如果可能的話,我仍然會嘗試不要求自己的ControlCollection,但很高興知道它可以完成:) – 2008-10-24 12:59:36

0

其實我必須限制在我的控件中添加控件,如果一些標誌爲真。我使用了ControlAdded事件,但僅添加了問題。 ControlAdded僅在位置0,0處的父項中添加該控件後觸發。在引發該事件後,它會在放置時根據鼠標位置重新定位控件。如果我從ControlAdded的EventHandler異常中的父級中刪除新的控件。