繁体   English   中英

使用反射调用控件的Validate()方法

[英]Calling a control's Validate() method using Reflection

我目前正在编写向导,并希望在进入下一页之前使每个页面都经过验证。

我想通过在页面上的每个子控件上调用Validate()方法并在其中任何一个失败时停止导航来阻止用户前进。

问题在于每个子控件上的Validate()方法都是私有方法,因此我无法直接访问它。 谁能给我一些有关如何使用反射从TextBox上的Validate()方法获取结果的建议(例如)?

非常感谢!

编辑:对不起-应该已经指定,这是Windows Forms,.Net 2.0

如果页面碰巧是ContainerControl实例,则可以只调用ValidateChildren。 如果没有,这似乎可以在单个控件上工作:

private void ValidateControl(Control control)
{
  Type type = control.GetType();
  type.InvokeMember("PerformControlValidation", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, control, new object[] { true });
}

如果您正在谈论asp.net,则可以在控件上设置ValidationGroup属性,然后在页面上为需要验证的组调用this.Validate("GroupName")

如果您需要验证整个页面,请忽略该组,只需调用Validate()即可。

无需反思-您想要的是ContainerControl.ValidateChildren() (在您的表单/对话框上调用它)

请注意, ContainerControl.Validate()将仅验证最后一个具有焦点及其祖先的控件:

Validate方法验证最后一个未通过验证的子控件,并且其祖先通过(但不包括)当前容器控件进行验证

但是,如果您的父控件不是ContainerControl(例如,Panel),则确实需要进行反射-请在此处查看NoBugz的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM