У меня есть приложение MDI, которое позволяет мне открывать различные типы дочерних окон. Я могу открыть несколько (но разных) экземпляров дочернего окна одного и того же типа. (Пример: я могу открыть 3 экземпляра дочернего окна типа A и 2 экземпляра дочернего окна типа B. Все 5 окон являются отдельными объектами и не обмениваются данными до тех пор, пока пользователь явно не перетащит одни и те же данные в несколько окон.) Каждое дочернее окно имеет ToolStripContainer с одним или несколькими ToolStrips. Как предотвратить:
- пользователь перетаскивает ToolStrip из дочернего окна типа A в ToolStripContainer в дочернем окне типа B?
- пользователь перетаскивает ToolStrip из одного экземпляра дочернего окна A в ToolStripContainer в других экземплярах того же типа окна?
Я пытаюсь запретить пользователю перетаскивать ToolStrip из экземпляра 1 типа A в экземпляр 2 типа A, выбирая что-то в экземпляре 2, а затем нажимая кнопку на панели инструментов только для того, чтобы что-то странное произошло с другим окном . Точно так же не имеет смысла перетаскивать ToolStrip из окна типа A в окно типа B - действия не применяются к этому типу, но для пользователя кажется, что все в порядке, потому что я позволяю им делать сопротивление.
Это так же просто, как добавить собственный обработчик для события ControlAdded или есть лучший способ сделать это? Я использую WinForms в .NET 3.0.
редактировать: шаги по воспроизведению
- Создайте новый проект приложения Windows.
- Добавьте новый пользовательский элемент управления. Предоставьте элементу управления ToolStripContainer, который содержит одну ToolStrip с одной кнопкой.
- Повторите шаг 2, получив класс UserControl2.
- Скомпилируйте решение, чтобы UserControl1 и UserControl2 отображались в вашем наборе инструментов.
- Перетащите UserControl1 и UserControl2 на форму. Установите границы, чтобы знать, где они находятся.
- Запустите приложение.
- Теперь можно перетащить ToolStrip из контейнера в UserControl1 и поместить его в контейнер в UserControl2 (оставив нулевые ToolStrips в UC1 и две ToolStrips в UC2).
- Теперь представьте, что у вас есть доступ только к коду в UserControl1. Как предотвратить перетаскивание пользователем ToolStrip из этого экземпляра ToolStripContainer?