精华内容
下载资源
问答
  • Validating //控件数据效验时发生 Validated //数据效验完成后发生 更好的理解这两个事件
  • C# TextBox中的 Validated 事件 可以实现在TextBox失去焦点时触发。

    C# TextBox中的  Validated 事件 可以实现在TextBox失去焦点时触发。

    展开全文
  • C# TextBox中的Validating与Validated事件

    千次阅读 2014-04-23 14:13:03
    validating事件发生的时候,值还没有被真正存入,所以是空的,而validated事件发生的时候,值已经存入,所以能取出;一个相当于值的前因,一个相当于值的后果。也就是说,可以用validating事件在值存入之前检验某个...

    validating事件发生的时候,值还没有被真正存入,所以是空的,而validated事件发生的时候,值已经存入,所以能取出;一个相当于值的前因,一个相当于值的后果。也就是说,可以用validating事件在值存入之前检验某个先决条件,如果不满足,那么取消之前的操作,用e.cancel;如果要检验值本身的合法性,那么就用validated事件在值存入之后得到该字段的值。这也是为什么validated事件的e参数没有cancel的原因,因为这个时候值已经存入,动作已经完成,无法取消。

    另外还有一点,不管是validating还是validated,事件发生的时候控件都没有失去焦点,所以才能谈得上对该控件进行操作。控件的事件发生顺序为Enter、GotFocus、Leave、Validating、Validated、LoseFocus,也就是说程序焦点先“进入”控件,然后控件“得到焦点”,然后焦点“离开”控件,这个时候焦点在控件内干的事情还没有存入,于是“校验”,然后存入,存入完了发生“校验完”事件,善后处理完毕后控件就“失去焦点”。

     

    您可能经常需要检查用户输入到 Windows 窗体中的信息是否有效。例如,如果您有一个电话号码的 TextBox 控件,则可以检查该控件是否只包含适当的字符(数字、括号和连字符等等)。通常,可使用正则表达式验证用户输入的数据。

    了解Validating之前,我们还需要了解焦点事件的顺序:

    焦点事件按下列顺序发生:

    Enter  //进入控件时发生
    GotFocus   //在控件接收焦点时发生
    Leave   //输入焦点离开控件时发生
    Validating   //控件数据效验时发生
    Validated  //数据效验完成后发生
    LostFocus  //失去焦点时发生
    如果 CausesValidation 属性设置为 false,则将取消 Validating 和 Validated 事件。

    注:GotFocus 和 LostFocus 事件是关联于 WM_KILLFOCUS 和 WM_SETFOCUS Windows 消息的低级别焦点事件。应对所有控件使用 Enter 和 Leave 事件。

    如果在 Validating 事件委托中,CancelEventArgs 对象的 Cancel 属性设置为 true,则正常情况下将在 Validating 事件之后发生的所有事件均被取消。

    在操作中验证

    要验证控件的内容,可以编写代码来处理 Validating 事件。在事件处理程序中,测试特定的条件(例如上面的电话号码)。验证是在处理时发生的一系列事件之一。

    如果测试失败,则 Validating 事件的 CancelEventArgs 的 Cancel 属性将设置为 True。这将取消 Validating 事件,并导致焦点返回到控件(juky_huang注:这样会出现一个死循环,除非数据效验通过,可以使用下面强制方法来关闭)。实际的结果是,除非数据有效,否则用户将无法退出该控件。

    关闭窗体和重写验证

    当数据无效时,维护焦点的控件的副作用是,使用关闭窗体的任何常规方法都将无法关闭父窗体:

    单击“关闭”框
    通过右击标题栏显示的“系统”菜单
    以编程方式调用 Close 方法
    不过,在某些情况下,无论控件中的值是否有效,您都希望用户可以关闭窗体。您可以重写验证,并通过创建窗体的 Closing 事件的处理程序来关闭仍包含无效数据的窗体。在该事件中,将 Cancel 属性设置为 False。这将强制关闭该窗体。

    注意  如果使用此方法强制关闭窗体,控件中尚未保存的任何信息都将丢失。

    注意  模式窗体在关闭时不会验证控件内容。您仍可以使用控件验证将焦点锁定到控件,但不必考虑关闭窗体的行为。

    展开全文
  • 1、dev控件TextEdit的mask设置 2、控件的Validated事件  private void S_9_Validated(object sender, EventArgs e)  {  try  {  string identityCard = S_9.Text.Tr

    1、dev控件TextEdit的mask设置


    2、控件的Validated事件

        private void S_9_Validated(object sender, EventArgs e)
            {
                try
                {
                    string identityCard = S_9.Text.Trim();//获取得到输入的身份证号码                
                     if (string.IsNullOrEmpty(identityCard))
                    {
                        MessageBox.Show("身份证号码不能为空!");//身份证号码不能为空,如果为空返回
                        if (S_9.CanFocus)
                        {
                            S_9.Focus();//设置当前输入焦点为textBox_IdentityCard
                        }
                        return;
                    }
                     if (Convert.ToInt32(DataClass.MyMeans.ExecuteScalar(@"select count(*) from tb_Stuffbusic where IDCard = @idcard and Employee in ('正式工','试用工')", CommandType.Text, new SqlParameter[] { new SqlParameter("@idcard", identityCard) })) > 1)
                     {
                         MessageBox.Show("身份证号码重复,已占用,请检查录入!");
                         S_9.Focus();
                     }
                    else
                    {
                        if (identityCard.Length != 15 && identityCard.Length != 18)//身份证号码只能为15位或18位其它不合法
                        {
                            MessageBox.Show("身份证号码为15位或18位,请检查!");
                            if (S_9.CanFocus)
                            {
                                S_9.Focus();
                            }
                            return;
                        }
                    }
                    string birthday = "";
                    string sex = "";
                    if (identityCard.Length == 18)//处理18位的身份证号码从号码中得到生日和性别代码
                    {
                        birthday = identityCard.Substring(6, 4) + "-" + identityCard.Substring(10, 2) + "-" + identityCard.Substring(12, 2);
                        sex = identityCard.Substring(14, 3);
                    }
                    if (identityCard.Length == 15)
                    {
                        birthday = "19" + identityCard.Substring(6, 2) + "-" + identityCard.Substring(8, 2) + "-" + identityCard.Substring(10, 2);
                        sex = identityCard.Substring(12, 3);
                    }
                    S_3.Text = birthday;
                    if (int.Parse(sex) % 2 == 0)//性别代码为偶数是女性奇数为男性
                    {
                        this.S_7.Text = "女";
                    }
                    else
                    {
                        this.S_7.Text = "男";
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("身份证号码输入有误");
                    if (S_9.CanFocus)
                    {
                        S_9.Focus();
                    }
                    return;
                }
            }  

    展开全文
  • 窗体上有很多控件,用来设置一些参数,需要在点击OK时对所有的参数进行验证,如果有参数无效则显示错误信息,效果如下: 首先,需要为控件添加验证事件private void textBox1_Validated(object sender, EventArgs e...

    窗体上有很多控件,用来设置一些参数,需要在点击OK时对所有的参数进行验证,如果有参数无效则显示错误信息,效果如下:

     

     

     

    首先,需要为控件添加验证事件

     

     

    正常情况下,应该是控件的焦点发生变化时才会触发Validated事件,下面是MSDN的一些资料

     


     

    When you change the focus by using the keyboard (TAB, SHIFT+TAB, and so on), by calling the Select or SelectNextControl methods, or by setting the ContainerControl.ActiveControl property to the current form, focus events occur in the following order:

    1. Enter

    2. GotFocus

    3. Leave

    4. Validating

    5. Validated

    6. LostFocus

    When you change the focus by using the mouse or by calling the Focus method, focus events occur in the following order:

    1. Enter

    2. GotFocus

    3. LostFocus

    4. Leave

    5. Validating

    6. Validated

    If the CausesValidation property is set to false, the Validating and Validated events are suppressed.

    If the Cancel property of the CancelEventArgs is set to true in the Validating event delegate, all events that would usually occur after the Validating event are suppressed.

    For more information about handling events, see Consuming Events.

     


     

     

     

    但是由于控件较多,总不能一个一个去改变焦点,而且这么做也有些不合理,有没有简单的方法能够触发这些控件的Validated事件呢?

     

    在网上找了找,发现解决办法其实很简单,Form类提供了一个ValidateChildren方法,使用它就可以轻松地实现上述需求


     

    MSDN上的资料 http://msdn.microsoft.com/en-us/library/ms159409.aspx

    .NET Framework Class Library
    Form.ValidateChildren Method

     

    This member overrides ContainerControl.ValidateChildren(), and more complete documentation might be available in that topic.

    Causes all of the child controls within a control that support validation to validate their data.

     

    Namespace:   System.Windows.Forms
    Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

    C#
    [BrowsableAttribute( true)]
    public override bool ValidateChildren()

    Return Value

    Type: System.Boolean
    true if all of the children validated successfully; otherwise, false. If called from the Validating or Validated event handlers, this method will always return false.
    Platforms

     

     

    如果不想验证所有的控件,比如有些控件可能Visible属性会随时发生变化,在验证时想跳过这些控件,方法就是在调用ValidateChildren时传递参数进行限制

    public virtual bool ValidateChildren (
        ValidationConstraints validationConstraints
    )

     

     

    ValidationConstraints Enumeration Members

     Member nameDescription
    EnabledValidates child controls whose Enabled property is set to true
    ImmediateChildrenValidates child controls that are directly hosted within the container. Does not validate any of the children of these children. For example, if you have a Form that contains a custom UserControl, and the UserControl contains a Button, using ImmediateChildren will cause the Validating event of the UserControl to occur, but not the Validating event of the Button.  
    NoneValidates all child controls, and all children of these child controls, regardless of their property settings.  
    SelectableValidates child controls that can be selected. 
    TabStopValidates child controls that have a TabStop value set, which means that the user can navigate to the control using the TAB key.  
    VisibleValidates child controls whose Visible property is set to true

     

     

     

    展开全文
  • 【转】C#中Validating和Validated事件

    千次阅读 2010-08-06 11:37:00
    您可能经常需要检查...了解Validating之前,我们还需要了解焦点事件的顺序: 焦点事件按下列顺序发生: Enter //进入控件时发生 GotFocus //在控件接收焦点时发生 Leave //输入焦点离开控件时发生
  • 当通过使用键盘(Tab、Shift+Tab 等)、通过调用 Select 或 SelectNextControl ...属性设置为当前窗体等方式更改焦点时,焦点事件按以下顺序发生: Enter GotFocus Leave Validating Validated
  • validating事件发生的时候,值还没有被真正存入,所以是空的,而validated事件发生的时候,值已经存入,所以能取出;一个相当于值的前因,一个相当于值的后果。也就是说,可以用validating事件在值存入之前检验某个...
  • C# TextBox中的Validating与Validated事件 转自:http://www.cnblogs.com/limingluzhu/archive/2011/11/09/2243695.html validating事件发生的时候,值还没有被真正存入,所以是空的,而validated事件发生的...
  • =========================================================...validating事件发生的时候,值还没有被真正存入,所以是空的,而validated事件发生的时候,值已经存入,所以能取出;一个相当于值的前因,一个相当于值的
  • [img=... 如图中的 "编号设置"为label30 ... 然而之后我点击其他控件却没有触发label30的Validated事件。。。 ...也都触发不了它们的Validated事件 请问如何解决的????
  • 一、了解C#中的预定义事件处理机制 在写代码前我们先来熟悉.net框架中和事件有关的类和委托,了解C#中预定义事件的处理。 EventArgs是包含事件数据的类的基类,用于传递事件的细节。 EventHandler是一个委托声明...
  • 我们在处理DataGridView必填项判断时,一般使用DataGridView的RowValidating事件判断,具体代码如下: protected override void OnRowValidating(DataGridViewCellCancelEventArgs e) { base.OnRowValidating(e...
  • } } 所有的验证者都需要实现ConstraintValidator接口,它的接口也很形象,包含一个初始化事件方法,和一个判断是否合法的方法。 public interface ConstraintValidator { void initialize(A constraintAnnotation);...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,644
精华内容 1,057
关键字:

validated事件