我做了个用户控件继承的是TextBox,我希望增加一个属性是不允许为空,然后我重写了OnValidated,在里面判断是否允许为空,为空则返回。
然后我在使用的时候发现第一次点提交按钮时可以判断,但是第二次就不行了,请问我该用什么事件?
就是类似asp.net里面那种验证控件那样的效果。

解决方案 »

  1.   

    在out事件里判断TextBox的值应该可以的吧
      

  2.   

      // 摘要:
            //     释放由 System.Windows.Forms.TextBox 占用的非托管资源,还可以另外再释放托管资源。
            //
            // 参数:
            //   disposing:
            //     为 true 则释放托管资源和非托管资源;为 false 则仅释放非托管资源。
            protected override void Dispose(bool disposing);
            //
            // 摘要:
            //     确定指定的键是输入键还是需要预处理的特殊键。
            //
            // 参数:
            //   keyData:
            //     键的一个值。
            //
            // 返回结果:
            //     如果指定的键是输入键,则为 true;否则为 false。
            protected override bool IsInputKey(Keys keyData);
            //
            // 摘要:
            //     引发 System.Windows.Forms.Control.BackColorChanged 事件。
            //
            // 参数:
            //   e:
            //     包含事件数据的 System.EventArgs。
            protected override void OnBackColorChanged(EventArgs e);
            //
            // 摘要:
            //     引发 System.Windows.Forms.Control.FontChanged 事件。
            //
            // 参数:
            //   e:
            //     包含事件数据的 System.EventArgs。
            protected override void OnFontChanged(EventArgs e);
            //
            // 摘要:
            //     引发 System.Windows.Forms.Control.GotFocus 事件。
            //
            // 参数:
            //   e:
            //     包含事件数据的 System.EventArgs。
            protected override void OnGotFocus(EventArgs e);
            //
            // 摘要:
            //     引发 System.Windows.Forms.Control.HandleCreated 事件。
            //
            // 参数:
            //   e:
            //     事件数据。
            protected override void OnHandleCreated(EventArgs e);
            //
            // 摘要:
            //     引发 System.Windows.Forms.Control.OnHandleDestroyed(System.EventArgs) 事件。
            //
            // 参数:
            //   e:
            //     包含事件数据的 System.EventArgs。
            protected override void OnHandleDestroyed(EventArgs e);
            //
            // 摘要:
            //     引发 System.Windows.Forms.TextBox.TextAlignChanged 事件。
            //
            // 参数:
            //   e:
            //     一个 System.EventArgs,其中包含事件数据。
            protected virtual void OnTextAlignChanged(EventArgs e);
            //
            // 摘要:
            //     将选定文本设置为指定文本,但不清除撤消缓冲区。
            //
            // 参数:
            //   text:
            //     要替换的文本。
            public void Paste(string text);
            //
            // 摘要:
            //     处理 Windows 消息。
            //
            // 参数:
            //   m:
            //     一个 Windows 消息对象。
            protected override void WndProc(ref Message m);
      

  3.   


    第一如果单独说控件不可为空的话,你可以在失去焦点的时候判断下。
    可是你说类似asp.net验证控件的话,就需要窗口的介入了,如果用户从来没有点击过该控件,那么控件
     自身没有办法。
    我以前写过一个基类窗口,它允许通过Form设计器直接选择设计器上的控件验证方式,例如是否为空,是否为Email,是否为数字等等,这需要窗口的帮助你才能完成功能。
      

  4.   

    "通过Form设计器直接选择设计器上的控件验证方式"是怎么做?
      

  5.   

    protected override void Dispose(bool disposing);是否释放资源?