validating

今天编程时,发现了一个关于CausesValidation与Validating事件引发的小问题.

在主窗体中拖放一个Textbox控件,名为tbx.拖放一个FlowLayoutPanel控件到主窗体,名为flowLayoutPanel.一个Button控件,名为btn1.将btn1拖放到flowLayoutPanel中.然后作如下设置:

tbx.CausesValidation=true;

btn1.CausesValidation=false;

然后设置tbxValidating事件:

         private   void  tbx_Validating( object  sender, CancelEventArgs e)
        
{
            
if (tbx.Text == string.Empty)
            
{
                MessageBox.Show(
"不能为空!");
                e.Cancel 
= true;
            }

        }

 在MSDN中有一段很明确地说明:

如果 CausesValidation 属性设置为 false,则将取消 ValidatingValidated 事件。对于诸如“帮助”按钮之类的控件而言,CausesValidation 属性值通常设置为 false

按常理,也就是说,如果tbx获得了焦点,然后输入的内容为空之后,点击btn1是应该不会引发tbx_Validating方法的.因为btn1.CausesValidation=false;但实际运行程序,还是会引发tbx_Validating,(不信你自己试试看!).难道MSDN出错了?

会不会问题出在tbxbtn1不在同一级容器中呢?

1.首先试着将两者都放在flowLayoutPanel中,再次执行程序,发现这次并没有引发tbx_Validating事件.看来还真是这个原因.

2.将两者都放在主窗体中,也没有引发tbx_Validating事件.

3.将tbx放在主窗体中,btn1放在flowLayoutPanel中,引发了tbx_Validating事件.

4.将btn1放在主窗体中,tbx放在flowLayoutPanel中,没有引发tbx_Validating事件.

看来,只有第3种情况是不符合"常理"的.我想细心的读者不难发现,这里有一个容器级别的问题.综上所述,即当要被验证的控件(本例是tbx)所属的容器与其他控件(本例的btn1)所属容器相同,或者前者是后者的父容器时,不会违背"常理";只有反过来的一种情况才会出意外.这一点MSDN中没有明确说出.

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值