我有一個MDI應用程序,允許我打開不同類型的子窗口。我可以打開同一類型的子窗口的多個(但不同的)實例。 (例如:我可以打開3個子窗口類型A實例和2個子窗口類型B實例。所有5個窗口都是不同的實體,除非用戶將相同的數據顯式拖放到多個窗口上,否則不會共享數據。)每個子窗口有一個ToolStripContainer和一個或多個ToolStrips。我該如何預防:如何防止ToolStrip在另一個ToolStripContainer中停靠?
- 用戶將ToolStrip從類型A的子窗口拖動到類型爲B的子窗口中的ToolStripContainer?
- 用戶將ToolStrip從一個子窗口A的實例拖動到另一個相同類型窗口的實例中的ToolStripContainer?
我試圖阻止用戶從類型A的實例1拖動ToolStrip到類型A的實例2,選擇實例2上的一些東西,然後單擊工具欄上的某個按鈕以獲得一些東西奇怪發生在其他窗口。同樣,將ToolStrip從類型A的窗口拖到類型B的窗口也沒有任何意義 - 這些操作不適用於該類型,但對用戶來說,它看起來像一切都很好,因爲我讓它們執行拖動。
就像爲ControlAdded事件添加我自己的處理程序一樣簡單,還是有更好的方法來做到這一點?我在.NET 3.0中使用WinForms。
編輯:重現步驟
- 創建一個新的Windows應用程序項目。
- 添加一個新的用戶控件。使用一個按鈕爲控件提供一個ToolStripContainer,其中包含一個ToolStrip。
- 重複第2步,給你一個UserControl2類。
- 編譯解決方案,以便UserControl1和UserControl2顯示在您的工具箱中。
- 將UserControl1和UserControl2拖到窗體上。設置邊界,以便知道邊界的位置。
- 運行該應用程序。
- 它現在可以從容器拖動ToolStrip的中的UserControl1和其放到UserControl2容器(留在UC1零個ToolStrips和UC2 2個ToolStrips)
- 現在想象一下,你只能訪問到的UserControl1代碼。如何防止用戶將ToolStrip拖出ToolStripContainer的實例?
我試圖重現你遇到的問題,但我似乎無法讓它工作。一旦我創建了兩個相同表單的實例,我就無法將工具欄從一個地方拖到另一個地方 – 2008-11-18 22:39:55
請參閱回購步驟。只有一個窗體實例具有兩個單獨的用戶控件,而不是窗體的兩個實例。 – 2011-05-28 21:47:32