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