早上好,
我正在研究一个使用控件验证的C#winform应用程序。我遇到的问题是,当用户点击文本框并尝试点击时,验证会触发并重新聚焦控件,基本上用户无法单击控件中的另一个控件。
我想要的结果是当用户单击提交按钮时,表单上的所有控件都会生效。我希望errorProvider图标出现在出错的字段旁边,并允许用户根据需要更正它们。
我的问题是,如何设置控件以允许用户在出现错误时在其外部单击。我希望用户能够填写表单的其余部分并自行回复错误,而不是立即强制处理它。
提前感谢您的任何帮助和建议,
答案 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)
有一个属性(我认为它在表单上)允许您在验证失败时在字段之间移动。我不记得它叫什么,但我认为它的描述非常具有描述性。