Ответы с форумов MSDN

Обработка нажатий клавиш-стрелок в Windows Forms

Date: 11.10.2019 4:50:53

Клавиши-стрелки зарезервированы в Windows Forms для особых целей: перемещения фокуса между кнопками, перемещения курсора в TextBox. На уровне пользовательских обработчиков они просто не обрабатываются.

Можно использовать PreviewKeyDown, он обрабатывает и эти клавиши:

        private void chart1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Up) { /*...*/ }
        }

Однако, в вашем коде есть еще одна проблема: вы пытаетесь обработать нажатия клавиш в элементе Chart, который не переключает на себя фокус при нажатии клавиш. Другие элементы - например кнопки, напротив, переключают. Если у вас на форме будет еще какие-то элементы, есть хороший шанс, что все будет работать не так, как вы ожидаете; ведь индивидуальные обработчики элементов вызываются только когда элемент в фокусе. Более правильным, мне кажется, было бы обрабатывать на уровне формы:

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {            
            if (keyData == Keys.Up)
            {
                //...
                return true;
            }
            
            return base.ProcessCmdKey(ref msg, keyData);
        }
Но недостаток этого способа - перемещение курсора стрелками в TextBox работать не будет...

 


Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub