只要按下数字键,我的表单中的代码就会两次更新 textBox1.Text 。
private void textBox1_KeyDown( object sender, KeyEventArgs e ) {
//MessageBox.Show();
if( char.IsNumber((char)e.KeyCode) ) {
textBox1.Text += (char)e.KeyCode;
}
}
解释为什么你可以? 修改代码或为我提供更好的解决方案。
54321
1234554321
答案 0 :(得分:3)
当您按某个键时,一个字符已经附加到您的TextBox
。然后运行以下代码,如果键代表一个数字,则再次追加它:
if (char.IsNumber((char)e.KeyCode)) {
textBox1.Text += (char)e.KeyCode;
}
如果你想抑制任何不是数字的键,你可以改用它:
e.SuppressKeyPress = !char.IsNumber((char)e.KeyCode);
答案 1 :(得分:1)
您可以尝试这样:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = !(e.KeyValue >= 48 && e.KeyValue <= 57);
}
检查New keyboard APIs: KeyEventArgs.SuppressKeyPress
问题是&#34; Handled&#34;没有处理挂起的WM_CHAR 消息已在消息队列中构建 - 因此设置Handled = true不会阻止KeyPress发生。
为了不打破任何目前已经获得e.Handled =的人 是的,我们需要添加一个名为SuppressKeyChar的新属性。要是我们 另一方面,如果&#34;处理&#34;一个keydown突然开始了 实际上工作,我们可能会打破那些不小心把这个设置的人 真。
答案 2 :(得分:1)
从语法中我假设您使用WinForms进行以下回答。
按键事件未被禁止,因此它仍然像普通按键事件一样工作,并将字符添加到框的文本中。另外,您可以再次将该字符添加到文本中。
如果按下某个键,请尝试禁止按下按键事件,您不想允许。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (!char.IsNumber((char)e.KeyCode))
{
e.SuppressKeyPress = true;
}
}
答案 3 :(得分:1)
尝试此代码仅接受数字
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
e.Handled = true;
}