有的时候,一个控件的Validating事件并没有被触发用户就按下了“确定”按钮,这样此控件中的数据就得不到验证。为了使其触发Validating事件,需要在“确定”按钮的Click事件中做相应处理:
private void okbutton_Click(object sender, EventArgs e)
{
foreach (Control control in this.Controls())
{
control.Focus();
if(!this.Validate())
{
this.DialogResult=DialogResult.None;
break;
}
}
}
这段代码遍历了窗体控件集合,依次使每个控件获得焦点,但是这不会自动触发控件Validating事件,因此需要调用窗体的Validate方法来触发该事件。Form.Validate方法不会验证窗体上所有控件,它只验证那些失去焦点的控件。
注意,这段代码不能验证控件中包含的子控件!
使用下面的方法可以获取窗体中所有的控件、子控件:
Control[] GetAllControls()
{
ArrayList list = new ArrayList();
//ArrayList类在命名空间System.Collections中
GetAllControls(this.Controls,list);
return (Control[])list.ToArray(typeof(Control));
}
void GetAllControls(Control.ControlCollection controls, ArrayList list)
{
foreach (Control control in controls)
{
if (control.HasChildren)
GetAllControls(control.Controls, list);
list.Add(control);
}
}
在遍历时只需用语句 foreach (Control control in GetAllControls()) 即可。
阅读(669) | 评论(0) | 转发(0) |