2

以下代码:

    private void tabControl_ControlRemoved(object sender, ControlEventArgs e)
    {
        MessageBox.Show(tabControl.TabCount.ToString());
    }

我假设在我关闭最后一个选项卡后应该告诉我 TabControl 中没有控件(选项卡页)。但相反,它告诉我有 1。

这是 TabControl.ControlRemoved 的预期行为,还是某种错误?

4

2 回答 2

2

这只是一个执行顺序问题。TabCount 属性直到 ControlRemoved事件触发后才会更新。这类问题在事件中相当普遍。

您可以通过在引发事件并完成所有处理后执行代码来解决此问题:

    private void tabControl1_ControlRemoved(object sender, ControlEventArgs e) {
        this.BeginInvoke(new Action(() => {
            MessageBox.Show(tabControl1.TabCount.ToString());
        }));
    }
于 2013-08-26T22:30:41.253 回答
1

在实际删除ControlRemoved您之前引发/触发该事件。TabPageTabPage实际上仅在ControlRemoved事件发生后才被删除,当然在ControlRemoved事件处理程序之外。在里面ControlRemoved你仍然可以访问“removed” TabPage。要解决此问题,您可以尝试以下代码:

private void tabControl_ControlRemoved(object sender, ControlEventArgs e)
{
    MessageBox.Show(tabControl.Controls.OfType<TabPage>().Count().ToString());        
}

这意味着,TabPage刚刚从Controls集合中删除,但仍在TabPages集合中。

于 2013-08-26T22:32:22.770 回答