0

我正在处理 WinForms TabControl 的取消选择事件中的选项卡更改。但是,在某些情况下,我会删除我在切换到它之前单击的选项卡。

设想

我目前有选项卡 1 和选项卡 2 我在选项卡 1 我单击选项卡 2 选项卡 1 取消选择事件从选项卡集合中删除选项卡 2 在 OnPaint 崩溃,因为它试图转到不再存在的选项卡。(ArgumentOutOfRangeException)。它在遇到选择事件之前崩溃。

我不想查看选项卡计数是否在取消选择时发生了变化,因为我只想在我将要使用的选项卡不再存在时取消。

任何帮助将不胜感激。

    private void TabControl_Deselecting( object sender, TabControlCancelEventArgs ) {
       DoSomeWork();
    }

假设 DoSomeWork 删除了我单击的选项卡。我怎样才能知道它是否确实删除了我打算去的标签?

4

2 回答 2

1

没有复制。场景很奇怪,但我不能让它崩溃。请务必取消取消选择。

    private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e) {
        if (e.TabPageIndex == 0 && tabControl1.TabCount > 1) {
            tabControl1.TabPages[1].Dispose();
            e.Cancel = true;
        }
    }
于 2012-04-03T20:50:56.327 回答
0

我想到的一种可能的解决方案:

如果您确定在Select 事件Tab1之前引发了 Deselect 事件,我会尝试声明我的自定义选项卡控件并覆盖它,就像这个伪代码Tab2OnPaintMethod

public class MyCustomTab : TabItem
{
   ...


   protected override OnPaint(....)
   {
      if(this.Parent == null) return;

       base.Paint(...);
   }    
}

清除TabControl您应该添加该类型的 TabItems。

于 2012-04-03T20:29:55.247 回答