C# 如何在windows窗体应用程序中启用控件键功能?
我正在使用以下textbox keypress()事件捕获用户输入的击键,以限制用户输入字母和数字值。C# 如何在windows窗体应用程序中启用控件键功能?,c#,winforms,textbox,C#,Winforms,Textbox,我正在使用以下textbox keypress()事件捕获用户输入的击键,以限制用户输入字母和数字值。 private void textBoxName_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Space || e.KeyChar
private void textBoxName_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !(char.IsLetter(e.KeyChar) ||
e.KeyChar == (char)Keys.Space ||
e.KeyChar == (char)Keys.Back ||
e.KeyChar==(char)Keys.ControlKey );
}
现在的问题是,通过使用上述代码,我无法使用快捷键,如Ctrl+C或Ctrl+v,即使keys.ControlKey在按键事件中被处理。我做错了什么
提前谢谢 如果在没有任何其他键的情况下按下控制键,则不会引发按键事件。仅用作关键点修改器。在这种情况下,
e.KeyChar
返回一个修改后的值,char.isleter()
考虑false
,
运算符在true
中对其进行转换,并将其分配给e.Handled
,从而取消按键事件。捕获用户输入的击键以限制用户输入 字母和数字值。
如您所说,如果数字是所需输入的一部分,则应使用
char.isleterordigit()
而不是char.IsLetter()
还有标点符号?也是输入的一部分吗?
char.ispuncuation()
:\“%&/()?*@,:;-”
两种方法的结果相同。在这两种情况下,
char.IsControl(e.KeyChar)
用于检查控件是否是Keycode的一部分,如果是,则通过XOR(ing)将其剥离。1)使用一个简单的正则表达式进行过滤。这个正则表达式可以让您更好地控制过滤内容。
Regex _KeyFilter = new Regex(@"^[a-zA-Z0-9.,]");
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != (char)Keys.Back && e.KeyChar != (char)Keys.Return && e.KeyChar != (char)Keys.Space)
{
e.Handled = !_KeyFilter.IsMatch((char.IsControl(e.KeyChar)
? (char)(e.KeyChar ^ 64)
: e.KeyChar).ToString());
}
}
2)使用char.isletorDigit()
和char.ispuncuation()
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != (char)Keys.Back && e.KeyChar != (char)Keys.Return && e.KeyChar != (char)Keys.Space)
{
char _keypress = char.IsControl(e.KeyChar) ? (char)(e.KeyChar ^ 64) : e.KeyChar;
e.Handled = !char.IsLetterOrDigit(_keypress) && !char.IsPunctuation(_keypress);
}
}
如果在没有任何其他键的情况下按下控制键,则不会引发Keypress事件。该事件仅用作键修饰符。在这种情况下,
e.KeyChar
返回一个修改后的值,该值为char.IsLetter()
认为为假
,!
操作符在为真
中对其进行转换,并将其分配给e.Handled
,从而取消按键事件。捕获用户输入的击键以限制用户输入 字母和数字值。
如您所说,如果数字是所需输入的一部分,则应使用
char.isleterordigit()
而不是char.IsLetter()
标点符号也是输入的一部分吗?
char.ispuncuation()
:\“%&/()?*@,:;\u-”将这些符号视为标点符号代码>
两种方法的结果相同。
在这两种情况下,char.IsControl(e.KeyChar)
用于检查控件是否是Keycode的一部分,如果是,则通过XOR(ing)将其剥离。
1)使用简单的正则表达式进行过滤。这一项可以让您更好地控制要过滤的内容。
Regex _KeyFilter = new Regex(@"^[a-zA-Z0-9.,]");
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != (char)Keys.Back && e.KeyChar != (char)Keys.Return && e.KeyChar != (char)Keys.Space)
{
e.Handled = !_KeyFilter.IsMatch((char.IsControl(e.KeyChar)
? (char)(e.KeyChar ^ 64)
: e.KeyChar).ToString());
}
}
2)使用char.isletorDigit()
和char.ispuncuation()
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != (char)Keys.Back && e.KeyChar != (char)Keys.Return && e.KeyChar != (char)Keys.Space)
{
char _keypress = char.IsControl(e.KeyChar) ? (char)(e.KeyChar ^ 64) : e.KeyChar;
e.Handled = !char.IsLetterOrDigit(_keypress) && !char.IsPunctuation(_keypress);
}
}
上面的代码适用于char.isLetter(),但不适用于char.isleterordigit()或char.isNumber()。@sheikh muzammil,这很有趣。当然我已经测试过了,对我来说效果很好,但是我不知道你想要过滤什么。您能否详细说明第二个代码段中的哪些失败之处?你用的是什么样的键盘?机器语言,是西方的还是东方的?上面的代码适用于char.isLetter(),但不适用于char.isleterordigit()或char.isNumber()。@sheikh muzammil这很有趣。当然我已经测试过了,对我来说效果很好,但是我不知道你想要过滤什么。您能否详细说明第二个代码段中的哪些失败之处?你用的是什么样的键盘?机器语言,是西方的还是东方的?