文本框验证,焦点切换问题

时间:2008-11-19 15:39:26

标签: c# winforms validation controls focus

早上好,

我正在研究一个使用控件验证的C#winform应用程序。我遇到的问题是,当用户点击文本框并尝试点击时,验证会触发并重新聚焦控件,基本上用户无法单击控件中的另一个控件。

我想要的结果是当用户单击提交按钮时,表单上的所有控件都会生效。我希望errorProvider图标出现在出错的字段旁边,并允许用户根据需要更正它们。

我的问题是,如何设置控件以允许用户在出现错误时在其外部单击。我希望用户能够填写表单的其余部分并自行回复错误,而不是立即强制处理它。

提前感谢您的任何帮助和建议,

5 个答案:

答案 0 :(得分:27)

表单具有AutoValidate属性,可以设置为允许焦点更改

答案 1 :(得分:6)

表单属性是“AutoValidate”,它会影响表单上的所有控件。这是一个枚举;将其设置为System.Windows.Forms.AutoValidate.EnableAllowFocusChange以允许用户退出验证失败的控件,但仍显示错误图标,允许用户提取错误工具提示。

控件“CausesValidation”属性是一个布尔值。如果是,则控件引发验证事件,触发errorProvider。它是错误的,一切都被绕过,用户可以退出控制,但没有错误图标或工具提示。

答案 2 :(得分:2)

最简单的方法就是将所有验证放在Submit按钮处理程序中,而不是将其放在控件中。

答案 3 :(得分:2)

我们有一个验证函数,如果表单有效则返回bool并在表单上设置所有错误提供程序:

看起来像这样:

    private void OnSave()
    {
      if(ValidateData())
      {
        //do save
      }
    }

    public bool ValidateData()
    {
        errorProvider.Clear();
        bool valid = true;
        if (this.defectStatusComboBox.SelectedIndex == -1)
        {
            errorProvider.SetError(defectStatusComboBox, "This is a required feild.");
            valid = false;
        }
        //etc...
        return valid;
     }

答案 4 :(得分:-1)

有一个属性(我认为它在表单上)允许您在验证失败时在字段之间移动。我不记得它叫什么,但我认为它的描述非常具有描述性。