【问题标题】:Preventing user from switching TabItem + Nasty bug?防止用户切换 TabItem + 讨厌的错误?
【发布时间】:2013-10-03 18:36:53
【问题描述】:

我有一些验证逻辑和一个 TabControl。我想防止用户在当前选项卡包含一些错误时切换选项卡。

我发现有些人问同样的问题,有些人给出了很好的答案,正如您在此处看到的那样。

TabControl- preventing user from changing the selected tab: MessageBox causing bug

但是,正如 Fredrik Hedblad 所说,当取消选择时显示 MessageBox 时,整个事情都会崩溃。它经历了一种奇怪的行为。事件停止引发(显然),如果您最小化并恢复窗口,它会突然引发而没有交互!!

有人可以解释一下吗?非常感谢!!!

在这里,我已经设置了一个解决问题的 Visual Studio 解决方案。它在 MainWindow.cs 中有代码。真的很简单,但行不通。尝试单击某个选项卡两次(在对话框显示后),您会注意到它不再显示对话框,但如果您最小化并恢复,对话框会自动显示并且选项卡已选择!

ZIP File With the Sample solution (Visual Studio 2012

【问题讨论】:

    标签: c# wpf tabcontrol messagebox tabitem


    【解决方案1】:

    在您的验证逻辑中,将其他 TabItems Visibility 属性设置为 Collapsed
    要么将IsEnabled 设为假。

    我猜你的验证逻辑中有 IsDirty 类型的属性,对吧?那你就清楚了!

    【讨论】:

    • 好吧,虽然这应该可以解决问题,但我会遍历所有 TabItems 启用/禁用。看起来很合理,但我仍然不知道 MessageBox 导致这种奇怪行为的原因以及如何避免它。无论如何,谢谢!
    • 当用户关闭 mbox 或点击“否”时会发生这种情况?
    • 使用 MessageBox 做什么都没有关系。它只是不起作用:S
    • 我已经用一个示例项目更新了问题,供您测试。
    • @SuperJMN 试试下面的答案。 :)
    【解决方案2】:

    尝试使用此代码,它可以工作:

    bool isError=true;
    private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
            {
                if (isError)
                {
                    e.Cancel = true;
                }            
            }
    

    其中isError是标签页发生错误时设置的bool变量。

    【讨论】:

    • 问题是关于 WPF 的。不幸的是,这只适用于 Windows 窗体。 WPF 中不存在该事件。对不起。
    • @SuperJMN 哦,没错.. :( 我错过了 WPF 标签。没关系 SuperJMN。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2018-12-14
    相关资源
    最近更新 更多