我在屏幕中使用了DoubleUpDown控件。我覆盖了.cs文件中的OnKeyPress,以防止输入任何非数字键。我不能在数字前面按空格键。但是我仍然可以在数字之间输入空格键,并且它不会转到我实现的覆盖方法。
我还可以选择控件中的所有数字,然后按空格键。
如何预防?
以下是我的覆盖方法:
protected override void OnKeyDown(KeyEventArgs e)
{
if ("OemPeriodDecimal".Contains(e.Key.ToString()) && DoubleUpDown.Text.Contains("."))
{
e.Handled = true;
}
else
{
e.Handled = !("D1D2D3D4D5D6D7D8D9D0OemPeriodDecimalNumPad0NumPad1NumPad2NumPad3NumPad4NumPad5NumPad6NumPad7NumPad8NumPad9".Contains(e.Key.ToString()));
}
}
我找到了解决方案。
它必须使用OnPreviewKeyDown。
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if ("OemPeriodDecimal".Contains(e.Key.ToString()) && DoubleUpDown.Text.Contains("."))
{
e.Handled = true;
}
else
{
e.Handled = !("D1D2D3D4D5D6D7D8D9D0OemPeriodDecimalNumPad0NumPad1NumPad2NumPad3NumPad4NumPad5NumPad6NumPad7NumPad8NumPad9".Contains(e.Key.ToString()));
}
}