我有一个TabControl
该用户可以添加/删除TabPage
s使用两个用户的按钮。为了得到一个明确的想法,图形用户界面看起来是这样的:
如果用户点击了“加”图标(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
包括刚刚添加的一个 - 预期MEControlRemoved
,我indicatorsTab.TabPages
找到所有TabPage
包括只是删除了一个 - 不期而至ME我不希望被去除的标签是在indicatorsTab.TabPages
的ControlRemoved
被触发后。所以,我有几个问题:
TabPage
to是仍然在集合中的事件被触发后,对不对?TabPage
s的拆除事件发生后刷新列表?ControlAdded
事件是由“兄弟”控制(同Parent
比TabControl
的孩子)引发的感觉,而ControlRemoved
由触发在TabControl
本身的孩子......如果是这样,任何人都可以请解释?可以延迟事件处理程序执行的删除处理完成后,直到:
private void tabControl1_ControlRemoved(object sender, ControlEventArgs e)
{
BeginInvoke(new Action(() =>
{
MessageBox.Show(tabControl1.TabCount.ToString());
}));
}
它显示了预期的结果。
注:TabControl
都有自己ControlsCollection
类,并在其Remove
方法,它首先去除TabPage
收集Controls
控制和提高ControlRemoved
,然后删除TabPage
收集TabPages
。因此,作为一个结果,在ControlRemoved
情况下,TabPage
仍然存在TabPages
集合中,而不是在Controls
集合。