1

我正在尝试使用此自定义方法在文本框中进行用户输入验证。但是我看到这里缺少一些东西,因为现在我无法将(焦点)移动到表单中的下一个文本框!

private void textBox_Validating(object sender, CancelEventArgs e)
{
    TextBox currenttb = (TextBox)sender;
    if (currenttb.Text == "")
    {
        MessageBox.Show(string.Format("Empty field {0 }", currenttb.Name.Substring(3)));
        e.Cancel = false;
    }

    else
    {
        e.Cancel = true;
    }
}

在表单构造函数中使用 foreach 循环将处理程序添加到文本框:

foreach(TextBox tb in this.Controls.OfType<TextBox>().Where(x => x.CausesValidation == true))
{
    tb.Validating += textBox_Validating;
}
4

1 回答 1

1

正如这里所回答的,它失去焦点的预期行为C# Validating input for textbox on winforms :-

描述

有很多方法可以验证您的 TextBox。您可以在每次击键、稍后或验证事件时执行此操作。

如果您的 TextBox 失去焦点(例如单击其他控件),则会触发验证事件。如果您设置 e.Cancel = true ,则 TextBox 不会失去焦点。

MSDN - Control.Validating 事件 当您通过使用键盘(TAB、SHIFT+TAB 等)、调用 Select 或 SelectNextControl 方法或将 ContainerControl.ActiveControl 属性设置为当前窗体来更改焦点时,焦点事件按以下顺序发生

进入

获得焦点

离开

证实

已验证

失去焦点

当您使用鼠标或调用 Focus 方法更改焦点时,焦点事件按以下顺序发生:

进入

获得焦点

失去焦点

离开

证实

已验证

于 2014-06-19T09:02:38.943 回答