我的winform中有一个文本框,在使用regex对keypress事件进行验证后,文本框的默认功能(如复制粘贴等)无效。
我该如何处理?
正则表达式使用代码
private void textbox_keypress(object sender,keypresseventargs e)
{
var regex= new regex(@"^[0-9,]*$");
if(!regex.ismatch(e.keychar.tostring()))
{
e.handled=true;
}
}
删除按键事件处理程序后,一切正常,但我必须限制用户输入逗号分隔的数字值,并在该文本框中复制粘贴删除退格。
答案 0 :(得分:1)
Ctrl-Commands不起作用,因为您中止了他们的输入。为避免这种情况,您必须
KeyPress
事件并没有告诉您这一点。来自MSDN的这个example向您展示了如何执行此操作:您编写KeyDown
事件的脚本以设置(或清除)标志变量,然后您可以在KeyPress
中进行测试。不,不是那么优雅的imho,但那是MS告诉你怎么做的..(注意我添加了Backspace代码\ b,因为它没有被Ctrl-check覆盖..) bool ctrlPressed = false;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
ctrlPressed = (Control.ModifierKeys == Keys.Control);
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!ctrlPressed)
{
var regex= new Regex(@"^[0-9,\b]*$");
if (!regex.IsMatch(e.KeyChar.ToString()))
{
e.Handled = true;
}
}
}
var regex= new Regex(@"^[0-9,\b\cC\cX\cA\cV\cZ]*$");
Here是来自MSDN的说明:
\ cX匹配ASCII控制字符,其中X是字母的字母 控制角色。例如,\ cC是CTRL-C。
旁注:即使在原始代码中,Ctl-Ins和Shift-Ins的旧式复制和粘贴命令也能正常工作。