gpt4 book ai didi

c# - 取消 TabPage.Validating 锁定我的 UI

转载 作者:行者123 更新时间:2023-11-30 17:47:49 26 4
gpt4 key购买 nike

我有一个带有多个 TabPage 的 TabControl,每个 TabPage 包含多个控件。当用户使用按钮离开我的选项卡时,我想验证该选项卡上的控件是否已正确修改。具体来说,我想检查他们是否选择了一个单选按钮。

如果验证失败(也就是说,我将 CancelEventArgs 设置为 true),UI 将不再响应输入。控件仍然响应悬停和单击(意思是颜色发生变化),但不采取任何操作。我无法导航到其他选项卡,甚至无法使用“X”按钮关闭应用。

我试过添加 errorProvider、添加 SelectTab 调用、向选项卡和选项卡上的控件添加 Focus() 调用,以及添加 MessageBox。 MessageBox 允许我单击确定,但随后返回到“锁定”用户界面。将 Focus() 调用添加到当前选项卡上的控件(验证失败)会导致选择下一个控件,但 UI 仍处于锁定状态。

知道为什么会发生这种情况或如何解决它吗?

注意:仅当我尝试使用选项卡上的按钮更改选项卡时才会发生这种情况。如果我只是单击另一个选项卡,取消会起作用,并且我会按预期返回到我的选项卡,所有控件都可用。

编辑:我终于有时间重新审视这个。我创建了一个简单的 2 选项卡控件,其中包含取消验证的复选框。我在选项卡上放置了一些其他控件(单选按钮和文本框)以演示“锁定”,但它们未包含在此处,因为它们背后没有代码。此代码说明了我遇到的问题。选中复选框并单击 button1 后,所有控件都变得无响应。代码如下。可应要求提供项目文件。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TabEventTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
tabControl1.SelectedIndex++;
}

private void button2_Click(object sender, EventArgs e)
{
tabControl1.SelectedIndex--;
}

private void tabPage2_Validating(object sender, CancelEventArgs e)
{
if (checkBox2.Checked)
{
e.Cancel = true;
}
}

private void tabPage1_Validating(object sender, CancelEventArgs e)
{
if (checkBox1.Checked)
{
e.Cancel = true;
}
}
}
}

最佳答案

经过大量研究,我得出的结论是,使用在 TabPage 级别引发的事件无法做到这一点。我发现 2006 年的一篇 MSDN 论坛帖子与我的问题类似,结论是这是 .NET 框架中的错误。如果那是真的,就我所见,它仍然没有修复。

我完成验证的方法是使用 Deselecting Event在选项卡控件上。这意味着我的所有选项卡都有一个事件处理程序(然后我有根据取消选择的选项卡触发的自定义验证函数),这不像我想要的那样干净,但它是有用的。我无法按照之前的建议使用 Selecting Event,因为它只给了我导航到的选项卡,我需要验证我离开的选项卡。我第一次错过了 Deselecting 的存在。

来 self 的事件处理程序的代码:

private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e)
{
switch (e.TabPageIndex)
{
case 0:
if (!validateTab1())
{
e.Cancel = true;
}
break;
case 1:
if (!validateTab2())
{
e.Cancel = true;
}
break;
default:
break;
}
}

关于c# - 取消 TabPage.Validating 锁定我的 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com