即使在 UC 的设计和 UC 的实例上将 AutoValidate 设置为 Disable 时,也会调用 UserControl Validating 函数
UserControl Validating function is called even when AutoValidate is set to Disable on both the UC's design and the UC's instance
- 创建了一个带有许多数据绑定子控件的 UserControl,none 其中有验证事件。
- 给 UC 的根一个验证事件。
- 将 UC 的根设置为 AutoValidate:Disabled
- 将 UC 放在主窗体上。
- 在主窗体上将 UC 实例的属性设置为 AutoValidate:Disabled
- 主窗体有“编辑”、“保存”、“取消”按钮。仅保存调用 uc.ValidateChildren().
预期结果:仅当我在主窗体上单击“保存”时才调用验证函数。
实际结果:当我在主窗体上单击“取消”时,也会调用验证函数。我非常希望它 不 被调用,因为这是取消按钮的全部要点。
主要问题是:要自动验证吗?
◾ 如果您不想在表单级别自动验证:
- 设置 AutoValidate property of the Form to
Disable
并且在控件之间移动时不会引发 Validating
事件。
- 当你想触发验证事件时调用
ValidateChildren
。
◾ 如果您希望在表单级别自动验证,但不希望在单击 X 按钮或取消按钮时进行验证:
设置AutoValidate property of the Form to EnableAllowFocusChange
.
对于取消按钮,请确保将 CausesValidation 属性 设置为 false
。
要防止在关闭表单时进行验证,请将以下代码添加到您的表单中:
private const int WM_CLOSE = 0x0010;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_CLOSE)
{
var autoValidate = this.AutoValidate;
this.AutoValidate = AutoValidate.Disable;
base.WndProc(ref m);
this.AutoValidate = autoValidate;
}
else
base.WndProc(ref m);
}
您可能想在此处查看我的 post 了解更多详情:How to prevent validating from being fired when I click X (Close button) on the form.
在我的例子中,修复是:
- 将主窗体的根目录设置为AutoValidate:Disabled。仅仅在 UC 实例上设置它是不够的。
- 创建了一个带有许多数据绑定子控件的 UserControl,none 其中有验证事件。
- 给 UC 的根一个验证事件。
- 将 UC 的根设置为 AutoValidate:Disabled
- 将 UC 放在主窗体上。
- 在主窗体上将 UC 实例的属性设置为 AutoValidate:Disabled
- 主窗体有“编辑”、“保存”、“取消”按钮。仅保存调用 uc.ValidateChildren().
预期结果:仅当我在主窗体上单击“保存”时才调用验证函数。
实际结果:当我在主窗体上单击“取消”时,也会调用验证函数。我非常希望它 不 被调用,因为这是取消按钮的全部要点。
主要问题是:要自动验证吗?
◾ 如果您不想在表单级别自动验证:
- 设置 AutoValidate property of the Form to
Disable
并且在控件之间移动时不会引发Validating
事件。 - 当你想触发验证事件时调用
ValidateChildren
。
◾ 如果您希望在表单级别自动验证,但不希望在单击 X 按钮或取消按钮时进行验证:
设置AutoValidate property of the Form to
EnableAllowFocusChange
.对于取消按钮,请确保将 CausesValidation 属性 设置为
false
。要防止在关闭表单时进行验证,请将以下代码添加到您的表单中:
private const int WM_CLOSE = 0x0010; protected override void WndProc(ref Message m) { if (m.Msg == WM_CLOSE) { var autoValidate = this.AutoValidate; this.AutoValidate = AutoValidate.Disable; base.WndProc(ref m); this.AutoValidate = autoValidate; } else base.WndProc(ref m); }
您可能想在此处查看我的 post 了解更多详情:How to prevent validating from being fired when I click X (Close button) on the form.
在我的例子中,修复是:
- 将主窗体的根目录设置为AutoValidate:Disabled。仅仅在 UC 实例上设置它是不够的。