2015-05-19 93 views
0

我在我的Windows窗体应用程序有一个文本框,我尝试使用下面的条件,看它们是否匹配:如何验证一个WinForm文本框

Can only enter A-F(a-f) and 0-9 
Backspace/Delete/Arrow keys are allowed 

我有以下的代码隐藏(默认文本是FFFFFF的形式负载):

private void tbHex_TextChanged(object sender, EventArgs e) 
{ 
    Regex rx = new Regex(@"^[a-fA-F0-9"); 
    MatchCollection mc = rx.Matches(tbHex.Text); 
    if (mc.Count > 0) //if anything other than what is asked is entered... 
    { 
     MessageBox.Show("NO!"); 
    } 
} 

当表单负荷是发生了什么,我显示的“NO!”消息框。

我该如何修改,以便用户只能输入有效的字符/键,并且在粘贴到文本框中时也进行相同的验证以及按字符输入字符。

+1

尝试使用['MaskedTextBox'](https://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox%28v=vs.110%29.aspx)而不是' TextBox'。 –

+1

是否缺少']'('@“^ [a-fA-F0-9”') – Han

+0

这是一个UI噩梦。更好地抑制任何无效字符而不是用消息框击中用户。看看右边的很多例子---> – TaW

回答

1

当文本最初设置时,文本更改发生在表单加载中。它也会触发每个字符的击键。如果您只希望它在用户更改文本后才触发,则可以使用诸如ValidatingValidated之类的事件。