如何在Button类中使用Validating / Validated事件?

时间:2013-04-11 13:35:23

标签: c# winforms validation button

我了解验证事件如何与文本框一起使用,但我不了解它是如何通过表单上的按钮触发的。

MSDN没有在documentation中列出验证/验证。

但是,这两个属性都在属性窗口中列为事件。 enter image description here

3 个答案:

答案 0 :(得分:4)

您正在访问MSDN的错误文档页面。您应该浏览Button Events,在那里您可以找到有关ValidatedValidating事件的帮助。

  

每个Control派生的对象都有两个名为Validating和的事件   Validated。它还有一个名为CausesValidation的属性。   当此设置为true时(默认情况下为true)则为控件   参与验证。否则,它没有。

示例:

private void textBox1_Validating(object sender, 
                System.ComponentModel.CancelEventArgs e)
{
   string errorMsg;
   if(!ValidEmailAddress(textBox1.Text, out errorMsg))
   {
      // Cancel the event and select the text to be corrected by the user.
      e.Cancel = true;
      textBox1.Select(0, textBox1.Text.Length);

      // Set the ErrorProvider error with the text to display.  
      this.errorProvider1.SetError(textBox1, errorMsg);
   }
}

private void textBox1_Validated(object sender, System.EventArgs e)
{
   // If all conditions have been met, clear the ErrorProvider of errors.
   errorProvider1.SetError(textBox1, "");
}
public bool ValidEmailAddress(string emailAddress, out string errorMessage)
{
   // Confirm that the e-mail address string is not empty. 
   if(emailAddress.Length == 0)
   {
      errorMessage = "e-mail address is required.";
         return false;
   }

   // Confirm that there is an "@" and a "." in the e-mail address, and in the correct order.
   if(emailAddress.IndexOf("@") > -1)
   {
      if(emailAddress.IndexOf(".", emailAddress.IndexOf("@") ) > emailAddress.IndexOf("@") )
      {
         errorMessage = "";
         return true;
      }
   }

   errorMessage = "e-mail address must be valid e-mail address format.\n" +
      "For example 'someone@example.com' ";
      return false;
}

修改
Source:

  

WinForms验证的最大问题是验证   仅在控件“失去焦点”时执行。所以用户必须这样做   实际上在文本框内单击然后单击其他地方   验证例程执行。如果您唯一担心,这很好   关于输入的数据是否正确。但这不起作用   好吧,如果您正在尝试确保用户没有将文本框留空   跳过它。

     

在我的解决方案中,当用户点击表单的提交按钮时,我   检查表单上的每个控件(或指定的任何容器)   并使用反射来确定是否为其定义了验证方法   控制。如果是,则执行验证方法。如果有的话   验证失败,例程返回失败并允许   过程停止。这个解决方案效果很好,尤其如果你有   几种形式的验证。

参考文献:
WinForm UI Validation
C# Validating input for textbox on winforms

答案 1 :(得分:2)

如果不符合条件,您可以使用验证事件取消按钮的操作,而不是将该操作置于onClick事件中,而是将其置于已验证的事件中。

答案 2 :(得分:1)

它们列在那里是因为它们是从Control类继承而来的。这是Validated,这里是Validating。请注意,它们来自Control