我有一个TabControl,其中包含多个TabPage,每个TabPage都包含多个控件。当用户使用按钮移动离开我的选项卡时,我希望验证该选项卡上的控件是否正确修改。具体而言,我想检查他们是否选择了单选按钮。
问题在于,如果验证失败(即,我将CancelEventArgs设置为true),则UI不再响应输入。控件仍然响应悬停和单击(即,颜色会改变),但不执行任何操作。我无法导航到其他选项卡,甚至不能使用“X”按钮关闭应用程序。
我尝试添加了errorProvider,添加了SelectTab调用,向选项卡和选项卡上的控件添加了Focus()调用,并添加了MessageBox。 MessageBox允许我点击确定,但然后将我返回到“锁定”的UI。将Focus()调用添加到当前选项卡上的控件(未通过验证)会导致选择下一个控件,但UI仍然被锁定。
有任何想法为什么会发生这种情况或如何绕过它吗?
注意:只有在我尝试使用选项卡上的按钮更改选项卡时才会发生这种情况。如果我只是单击另一个选项卡,则取消操作起作用,并且可以返回到我的选项卡,所有控件都可用。
编辑: 我最终有时间重新访问这个问题。我创建了一个简单的2选项卡控件,其中包含复选框以取消验证。我在选项卡上放置了一些其他控件(单选按钮和文本框)来演示“锁定”,但它们没有包含在此处,因为它们没有代码支持。此代码说明了我遇到的问题。勾选复选框并单击button1后,所有控件都变得无响应。代码如下。项目文件可根据要求提供。
问题在于,如果验证失败(即,我将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;
}
}
}
}