在我的项目中,我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事件提供给所有TextBox。像这样的东西:
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?
}
我不知道在上面的方法中要写什么,因为没有一个文本框需要考虑。请建议。
编辑:我提到的模式不应该被允许进入TextBox,即文本应该自动转换为匹配的字符串。 (应该禁止我在模式中提到的字符。)
答案 0 :(得分: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
}
}
已添加,最好是挂钩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 :(得分:0)
你也可以发送文本框控件将this.textbox1发送到事件处理程序方法,并在事件处理程序中使用正则表达式检查该控件的输入文本。