以下代码:
private void tabControl_ControlRemoved(object sender, ControlEventArgs e)
{
MessageBox.Show(tabControl.TabCount.ToString());
}
我假设应该告诉我在关闭最后一个选项卡后TabControl中没有控件(tabpages)。但相反它告诉我有1。
这是TabControl.ControlRemoved的预期行为,还是这种错误?
答案 0 :(得分:2)
这只是一个执行顺序问题。触发ControlRemoved事件后, 后,TabCount属性不会更新。这些问题在事件中很常见。
通过在引发事件并完成所有处理后执行代码来解决此问题:
private void tabControl1_ControlRemoved(object sender, ControlEventArgs e) {
this.BeginInvoke(new Action(() => {
MessageBox.Show(tabControl1.TabCount.ToString());
}));
}
答案 1 :(得分:1)
ControlRemoved
事件在TabPage
被实际删除之前被引发/触发。您的TabPage
实际上仅在ControlRemoved
事件之后删除,当然在ControlRemoved
事件处理程序之外。在ControlRemoved
内,您仍然可以访问“已删除”TabPage
。要解决此问题,您可以尝试使用此代码:
private void tabControl_ControlRemoved(object sender, ControlEventArgs e)
{
MessageBox.Show(tabControl.Controls.OfType<TabPage>().Count().ToString());
}
这意味着,TabPage
刚刚从Controls
集合中删除,但仍在TabPages
集合中。