0

在我的项目中,有很多TextBoxes里面TabControl我给同样的事件是这样的:(工作

在我的表单构造函数中:

    SetProperty(this);

private void SetProperty(Control ctr)
{
    foreach (Control control in ctr.Controls)
    {
        if (control is TextBox)  
        {
            control.TextChanged += new EventHandler(ValidateText);
        }
        else
        {
           if (control.HasChildren) 
           {
               SetProperty(control);  //Recursive function if the control is nested
           }
        }
    }
}

现在我正在尝试将 TextChanged 事件提供给所有 TextBoxes。像这样的东西:

    private void ValidateText(object sender,EventArgs e)
    {
        String strpattern = @"^[a-zA-Z][a-zA-Z0-9\'\' ']{1,20}$"; //Pattern is Ok
        Regex regex = new Regex(strpattern);  
        //What should I write here?             
    }

我不知道在上述方法中要写什么,因为没有一个要考虑的文本框。请建议。

编辑:我提到的模式不应该被允许进入文本框,即文本应该自动转换为匹配的字符串。(应该禁止我在模式中提到的字符)。

4

2 回答 2

3

您应该首先获取调用的引用,TextBox然后您可以匹配正则表达式进行验证以做出您想要的任何决定。

private void ValidateText(object sender, EventArgs e)
{
    TextBox txtBox = sender as TextBox;
    String strpattern = @"^[a-zA-Z][a-zA-Z0-9\'\' ']{1,20}$"; //Pattern is Ok
    Regex regex = new Regex(strpattern);
    if (!regex.Match(txtBox.Text).Success)
    {
        // passed
    }
}

ADDED,更好的是挂钩Validating事件,您可以随时调用此事件,以便TextBoxes一次执行所有验证。

private void SetProperty(Control ctr)
{
    foreach (Control control in ctr.Controls)
    {
        if (control is TextBox)
        {
            control.Validating += ValidateText;
        }
        else
        {
            if (control.HasChildren)
            {
                SetProperty(control);  //Recursive function if the control is nested
            }
        }
    }
}

private void ValidateText(object sender, CancelEventArgs e)
{
    TextBox txtBox = sender as TextBox;
    String strpattern = @"^[a-zA-Z][a-zA-Z0-9\'\' ']{1,20}$"; //Pattern is Ok
    Regex regex = new Regex(strpattern);
    //What should I write here?
    if (!regex.Match(txtBox.Text).Success)
    {
        e.Cancel = true;
    }
    e.Cancel = false;
}

要执行验证,请调用此方法:

bool isValid = !this.ValidateChildren(ValidationConstraints.Enabled);

参考:

  1. 扩展文本框控件以针对正则表达式进行验证
  2. Windows 窗体中的验证
于 2012-11-15T05:05:43.767 回答
0

您还可以将文本框控件说 this.textbox1 发送到事件处理程序方法,并使用事件处理程序内的正则表达式检查该控件的输入文本。

于 2012-11-20T17:52:31.607 回答