【发布时间】:2015-10-07 06:53:51
【问题描述】:
我有只允许数字、删除和退格的文本框。此代码适用于此,但即使我禁用它,它也允许空格键。我不确定这里缺少什么。
public class NumberTextBox : TextBox
{
/// <summary>
/// Allows only numbers, delete, backspace keys
/// </summary>
public NumberTextBox()
{
KeyDown += new KeyEventHandler(OnKeyDown);
}
private bool IsNumberKey(Key inKey)
{
if (inKey < Key.D0 || inKey > Key.D9)
{
if (inKey < Key.NumPad0 || inKey > Key.NumPad9)
{
return false;
}
}
return true;
}
private bool IsActionKey(Key inKey)
{
return inKey == Key.Delete || inKey == Key.Back;
}
private bool IsSpaceKey(Key inKey)
{
if (inKey == Key.Space)
{
return true;
}
return false;
}
protected void OnKeyDown(object sender, KeyEventArgs e)
{
e.Handled = !IsNumberKey(e.Key) && !IsActionKey(e.Key) && IsSpaceKey(e.Key);
}
}
【问题讨论】:
-
这应该对你有帮助:stackoverflow.com/questions/16125470/… 只要确保输入键是数字,否则将其抑制。
-
要修复此代码,您应该使用:
e.Handled = (!IsNumberKey(e.Key) && !IsActionKey(e.Key)) || IsSpaceKey(e.Key); -
@SepehrM,感谢您的评论。我添加了您的建议,但它不起作用,但我将其更改为 PreviewKeyDown 而不是 KeyDown,所以它现在可以工作了。 PreviewKeyDown += new KeyEventHandler(OnKeyDown);