【问题标题】:How can I cancel the selecting Event for a TabControl如何取消 TabControl 的选择事件
【发布时间】:2012-04-04 05:28:44
【问题描述】:

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

场景

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

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

任何帮助将不胜感激。

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

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

【问题讨论】:

  • 您能否再澄清一下这个问题以及@fahed 的预期结果。无法理解您想要的内容。
  • 您需要重新考虑您的用户界面。这听起来太混乱且难以使用。
  • Tab 删除深度为 3 或 4 个函数,哇,这有点过头了。您是 binding 控制业务对象并将所有逻辑放入业务对象中吗?这个 GUI 的功能听起来很不直观。

标签: c# winforms tabcontrol


【解决方案1】:

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

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

【讨论】:

  • 让我看看如何在取消选择时将 e.cancel 设置为 true。这将解决问题。
  • 问题是tab移除是代码深处的3或4个函数
  • 无论你在做什么,从这里完全看不见,你做错了。您需要更好地记录您的问题,需要重现问题的 sn-p。
【解决方案2】:

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

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

public class MyCustomTab : TabItem
{
   ...


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

       base.Paint(...);
   }    
}

向您的TabControl 明确您应该添加该类型的 TabItems。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2012-06-25
    相关资源
    最近更新 更多