如何取消TabControl的选择事件

时间:2012-04-03 20:22:38

标签: c# winforms tabcontrol

我在WinForms TabControl的Deselecting事件中处理标签更改。但是,在某些情况下,我会删除我在切换之前单击的选项卡。

场景

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

我不想在取消选择时查看tabcount是否发生了变化,因为我只想在我不再存在的标签时取消。

非常感谢任何帮助。

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

假设DoSomeWork删除我点击的标签。如何确定是否删除了我打算去的标签?

2 个答案:

答案 0 :(得分:1)

没有重复。这种情况很奇怪,但我无法让它崩溃。请确保取消取消选择。

    private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e) {
        if (e.TabPageIndex == 0 && tabControl1.TabCount > 1) {
            tabControl1.TabPages[1].Dispose();
            e.Cancel = true;
        }
    }

答案 1 :(得分:0)

我脑海中浮现出一种可能的解决方案:

如果您确定Tab1取消选择在Tab2选择事件之前引发的事件,我会尝试,声明我的自定义标签控件并覆盖它OnPaintMethod ,像这个伪代码

public class MyCustomTab : TabItem
{
   ...


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

       base.Paint(...);
   }    
}

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