Вопрос

I use a DoubleUpDown control in the screen. I override a OnKeyPressed in .cs file to prevent any non-numeric key to enter. I cannot press a spacebar in front of numbers. But I still can enter a spacebar between a number and it doesn't go to an override method I implemented.

And I also can select all number in the control then press a spacebar.

How to prevent it?

below is my override method:

    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()));
        }
    }
Это было полезно?

Решение

I found the solution.

It has to use 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()));
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top