Как заставить ключи вызывать методы в программе на C #

1

Я новичок здесь, и я могу быть взорван за то, что не видел старых сообщений о Ключах, но уверяю вас, что я прочитал многие из них и не могу найти ответ, который я ищу.

У меня есть программа на С#, калькулятор, которая правильно вычисляет уравнения, но я хочу иметь возможность вызывать методы с помощью нажатия и ввода с клавиатуры. Например, если пользователь вводит данные в 2 + 2 ENTER, текстовое поле будет показывать 4. Единственный способ, который программа делает на данный момент, - это то, что пользователь на самом деле нажимает на эти кнопки. Изучая, как работают клавиши в С#, я нашел много информации о KeyCode и Keys, но очень мало информации о том, как реально реализовать их в рамках программы. Одна вещь, с которой мне пришлось столкнуться в отношении реализации кода, была следующая:

private void Calculator_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Up)
        {
            MessageBox.Show("Up button was pressed");
        }
    }

Имя формы - Калькулятор. Я могу скомпилировать этот код без проблем, но он ничего не делает. Я могу разместить всю программу для вас, ребята, если вы захотите, но она длится несколько страниц и содержит много комментариев и других материалов. Я просто не понимаю, почему я не могу заставить свою программу читать ключ. Я также попробовал KeyPress вместо KeyDown, все равно ничего. Любая помощь приветствуется.

Edit: Marcel N. дал хороший ответ, и я смог заставить его работать после включения KeyPreview и использования кода:

protected override void OnKeyDown(KeyEventArgs e)
        { 
            if (e.KeyCode == Keys.D1)           
                cmd1.PerformClick();
            if (e.KeyCode == Keys.D2)
                cmd2.PerformClick();
            if (e.KeyCode == Keys.D3)
                cmd3.PerformClick();
            if (e.KeyCode == Keys.D4)
                cmd4.PerformClick();
             ......................
        }

Я очень рад, что все номера работают, но у меня все еще возникают проблемы с вводом, делением, умножением и клавишами со стрелками. Спасибо за скорую помощь.

Теги:
key
input
keydown

1 ответ

0
Лучший ответ

Вам необходимо установить для свойства KeyPreview в форме значение true.

Это приведет к тому, что все ключевые события будут переданы в форму сначала, прежде чем они будут делегированы сосредоточенному элементу управления. Затем вы можете использовать текущий обработчик KeyDown для вызова ваших методов/обработчиков.

Наконец, если вы не хотите, чтобы ключевые события достигли сосредоточенного управления вообще, убедитесь, что для свойства KeyPressEventArgs.Handled значение true, когда вы получаете событие на уровне формы.

  • 0
    Спасибо, что работал как шарм. У меня все еще возникают проблемы с вводом Enter и клавишами со стрелками.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню