2012-04-03 72 views
0

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

场景

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

我不想看看tabcount在取消选择中是否发生了变化,因为我只想取消选择了我将不再存在的选项卡。

任何帮助将不胜感激。

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

假设DoSomeWork删除了我点击的Tab。我如何知道它是否删除了我打算去的标签?

+0

你能否澄清一点问题以及期望的结果是@fahed。无法理解你想要的东西。 – ImGreg 2012-04-03 20:50:48

+0

您需要重新考虑您的用户界面。这听起来太混乱,难以使用。 – BoltBait 2012-04-03 21:03:00

+0

Tab删除是3或4功能深,谁有点超过顶部。您是否对商业对象进行“绑定”控制并将所有逻辑放入业务对象中?这个GUI的功能听起来很不直观。 – 2012-04-04 03:20:02

回答

1

无再现。这个场景很奇怪,但我无法让它崩溃。确保您取消取消选择。

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

让我看看如何在取消选择中将e.cancel设置为true。那将解决这个问题。 – fbhdev 2012-04-03 21:07:54

+0

问题在于代码清除是在代码深处的3或4个函数 – fbhdev 2012-04-03 21:08:41

+1

不管你在做什么,它从这里是完全不可见的,你做错了。你需要更好地记录你的问题,需要重现问题的片段。 – 2012-04-03 21:19:18

0

一个附带在我脑海中可能的解决方案:

,如果你确信Tab1取消事件之前Tab2选择引发的事件,我想尝试,申报我的自定义标签控件并重写它的OnPaintMethod,像这

public class MyCustomTab : TabItem 
{ 
    ... 


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

     base.Paint(...); 
    }  
} 

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