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

6
早上好,
我正在开发一个使用验证控件的C# winform应用程序。我的问题是当用户点击文本框并试图点击其他控件时,验证会触发并重新聚焦到该控件上,导致用户无法离开该控件去点击其他控件。
我的期望结果是当用户点击提交按钮时,所有控件都进行验证。我希望错误提供者图标出现在出错的字段旁边,并允许用户根据需要进行更正。
我的问题是,如何设置控件以允许用户在存在错误时点击其外部。我希望用户有能力填写表单的其余部分,并自己回来处理错误,而不是被迫立即处理它。
感谢您提前的帮助和建议,
5个回答

28

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


1
先生,您是一位学者和绅士。我甚至没有想到要检查表单级属性,因为我认为可能是错误提供程序或可验证控件。 - Colton

7
属性是"AutoValidate",它影响表单上的所有控件。它是一个枚举类型;将其设置为System.Windows.Forms.AutoValidate.EnableAllowFocusChange可以允许用户退出未通过验证的控件,但仍显示错误图标,使用户可以拉出错误提示框。
控件的"CausesValidation"属性是布尔型。如果为true,则控件会触发验证事件,从而触发errorProvider。如果为false,则所有东西都被绕过,用户可以退出控件,但没有错误图标或提示信息。

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

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;
     }

-1

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


有一个 CausesValidation 属性,我相信你需要在目标控件上设置它 - 但是你需要将其设置为 false 才能应用到 所有 控件。在我看来,更简单的方法是避免整个机制。 - Jon Skeet
也许是因为 - 公平地说,我们通常会在按钮点击时进行自己的验证... - kͩeͣmͮpͥ ͩ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接