这是我的情况:我有TabControl
两个TabPage's
(tabPage1
& tabPage2
)。tabPage2
有一个我创建的自定义用户控件(因为它在多种表单中使用),其中包含一个TextBox
通过自定义用户控件的事件附加了一些自定义验证Validating
的自定义用户控件。如果我tabPage2
选择并在文本框中输入了无效数据并尝试离开文本框,则验证会正常工作,我的自定义事件处理程序会运行,并且事情会按照我告诉他们的方式运行。但是,如果(在同一场景中)我切换到tabPage1
fromtabPage2
而不是仅仅离开文本框,则允许切换到tabPage1
. 然后对我的文本框进行两次验证。此外,我无法控制表单上的任何其他内容,因为如果发现文本框无效,我会将焦点放在文本框上,但我看不到文本框能够在其中放入任何有效数据!(我希望一切都说得通。如果需要,不要害怕让我澄清。)
这是我的问题:当发现字段无效时,如何阻止选项卡切换;因此,也解决了验证运行两次的问题?
这是我的代码:(此方法包含在提到的自定义用户控件中。)
private void OnValidatingUserControl(object sender, CancelEventArgs args)
{
if (IsTextBoxInvalid())
{
args.Cancel = true;
MessageBox.Show("Invalid data in text box!!!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.textBox.Focus();
}
}