Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371778
  • 博文数量: 94
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 823
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-04 16:49
文章分类

全部博文(94)

文章存档

2015年(1)

2011年(1)

2010年(3)

2008年(8)

2007年(55)

2006年(26)

我的朋友

分类:

2007-08-02 10:34:21

有的时候,一个控件的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) |
给主人留下些什么吧!~~