我有一个带有多个 TabPages 的 TabControl,每个 TabPages 都包含多个控件。当用户使用按钮离开我的选项卡时,我想验证该选项卡上的控件是否已正确修改。具体来说,我想检查他们是否选择了单选按钮。
发生的情况是,如果验证失败(意思是,我将 CancelEventArgs 设置为 true),UI 将不再响应输入。控件仍然响应悬停和单击(意思是颜色改变),但不采取任何行动。我无法导航到其他选项卡,甚至无法使用“X”按钮关闭应用程序。
我尝试添加 errorProvider、添加 SelectTab 调用、向选项卡和选项卡上的控件添加 Focus() 调用,以及添加 MessageBox。MessageBox 允许我单击“确定”,但随后将我返回到“锁定”的 UI。将 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;
}
}
}
}