如何在c#中使用KeyDown事件使文本框只接收数字键值
本文关键字:键值 数字 文本 KeyDown 事件 | 更新日期: 2023-09-27 18:15:57
我表单中的这段代码更新了textBox1。每当按数字键时,输入两次。
private void textBox1_KeyDown( object sender, KeyEventArgs e ) {
//MessageBox.Show();
if( char.IsNumber((char)e.KeyCode) ) {
textBox1.Text += (char)e.KeyCode;
}
}
如果可以,解释为什么?修改代码或为我提供一个更好的解决方案。
输入(in textbox1):
54321
输出:1234554321
当您按下一个键时,一个字符已经附加到您的TextBox
。然后运行以下代码,如果键表示一个数字,则再次追加它:
if (char.IsNumber((char)e.KeyCode)) {
textBox1.Text += (char)e.KeyCode;
}
如果你想要隐藏非数字的键,你可以这样做:
e.SuppressKeyPress = !char.IsNumber((char)e.KeyCode);
从语法来看,我假设您使用的是WinForms。
按下的键事件没有被抑制,因此它仍然像普通按下的键事件一样工作,并将字符添加到框的文本中。此外,您可以再次将字符添加到文本中。
当键被按下时,尝试抑制键按事件,您不希望允许。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (!char.IsNumber((char)e.KeyCode))
{
e.SuppressKeyPress = true;
}
}
你可以这样尝试:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = !(e.KeyValue >= 48 && e.KeyValue <= 57);
}
检查新的键盘api: KeyEventArgs。SuppressKeyPress
问题是"Handled"不关心挂起的WM_CHAR消息队列中已经建立的消息-因此设置Handled =true不能阻止KeyPress的发生。
为了不破坏任何目前得到e.d handled =true,我们需要添加一个名为SuppressKeyChar的新属性。如果我们反过来说,如果"处理"按键突然响起实际上工作,我们可能会打破那些不小心有这个设置的人真的。
试试这个代码只接受数字
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
e.Handled = true;
}