У меня есть TabControl
, к которому пользователь может добавлять / удалять TabPage
с помощью двух пользовательских кнопок.Чтобы получить четкое представление, графический интерфейс выглядит следующим образом:
Если пользователь нажимает на значок «Плюс» (Parent
являетсяВ основной форме, которая также является Parent
самой TabControl
), добавляется новый TabPage
, содержащий пользовательский элемент управления:
TabPage indicator = new TabPage();
indicator.Controls.Add(new IndicatorTab(this.conditionsTab, this.limitsTab) { Dock = DockStyle.Fill});
indicatorsTab.TabPages.Add(indicator);
Если пользователь нажимает кнопку «Удалить» внутриВ пользовательском элементе управления происходит следующее:
Parent.Dispose();
Я добавил ControlEventHandler
к этому TabControl
для событий ControlAdded
и ControlRemoved
, в которых я запускаю этот цикл:
foreach (TabPage indicator in indicatorsTab.TabPages)
{
//stuff
}
Моя проблема заключается в следующем:
- Когда срабатывает событие
ControlAdded
, я нахожу в indicatorsTab.TabPages
все TabPage
, включая только что добавленный - Ожидается для меня - Когда срабатывает событие
ControlRemoved
, я нахожу в indicatorsTab.TabPages
все TabPage
, включая только что удаленный - НЕ ЖЕЛАЛ МНЕ
Я не ожидал, что удаленная вкладка будет в indicatorsTab.TabPages
после срабатывания ControlRemoved
.Итак, у меня есть пара вопросов:
- Я ошибаюсь в своей логике?Ожидается ли, что удаленный
TabPage
останется в коллекции сразу после запуска события? - Как получить обновленный список через
TabPage
s после события удаления? - Не знаю почему, но я чувствую, что это расходящееся поведение есть, что увидеть в связи с тем фактом, что событие
ControlAdded
запускается элементом управления "братом" (потомком того же Parent
, что и TabControl
), в то время какControlRemoved
запускается ребенком самого TabControl
... если да, кто-нибудь может объяснить, пожалуйста?