【问题标题】:What is expected behavior of TabControl.ControlRemoved?TabControl.ControlRemoved 的预期行为是什么?
【发布时间】:2013-08-27 06:32:22
【问题描述】:

以下代码:

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

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

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

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

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

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

        private void tabControl1_ControlRemoved(object sender, ControlEventArgs e) {
            this.BeginInvoke(new Action(() => {
                MessageBox.Show(tabControl1.TabCount.ToString());
            }));
        }
    

    【讨论】:

    • 不错的解决方案。非常感谢@Hans,当我有足够的声誉时,我会投票赞成这个答案。
    【解决方案2】:

    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 集合中。

    【讨论】:

    • 感谢@KingKing 的精彩解释和代码。当我有足够的代表这样做时,我会回来投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2021-10-15
    • 2016-11-12
    相关资源
    最近更新 更多