Задать вопрос
  • Настройка управления label в c# с клавиатуры?

    @Melz
    Проблема в другом. Попробуйте использовать TextBox вместо Label и ваш код будет работать.
    Проблема заключается именно в выбранном контроле. PreviewKeyDown генерируется перед событием KeyDown при нажатии клавиши, когда элемент управления имеет фокус.
    Label не является контролем ввода и поэтому фокус (такие серые точечки/линии вокруг) во время работы не получает.
    Some key presses, such as the TAB, RETURN, ESC, and arrow keys, are typically ignored by some controls because they are not considered input key presses.

    Ваш случай именно этот - стрелочки проигнорируются.
    Если вы добавите кучу контролей в форму и понажимаете TAB, то лабел фокус не получит.

    Поэтому или делайте глобально, как сказали выше, на форму.
    Или берите TextBox, ставьте ему ReadOnly и в свойствах делаете его похожим на Label. Ну там системный фон, убрать окантовку и тд.
    Ответ написан
    1 комментарий
  • Настройка управления label в c# с клавиатуры?

    @kttotto
    пофиг на чем писать
    Проблема в то, что Вы обработку события добавили к label1, а надо было для Form1. Только что проверил, все работает.
    private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                switch (e.KeyCode.ToString())
                {
                    case "Down":
                        label1.Top += 45;
                        break;
    
                    case "Up":
                        label1.Top -= 45;
                        break;
    
                    case "Left":
                        label1.Left -= 45;
                        break;
    
                    case "Right":
                        label1.Left += 45;
                        break;
                }
            }
        }


    Только не комильфо так писать e.KeyCode.ToString()
    Вариант покрасифше)
    switch (e.KeyCode)
                {
                    case Keys.Down:
                        label1.Top += 45;
                        break;
    
                    case Keys.Up:
                        label1.Top -= 45;
                        break;
    
                    case Keys.Left:
                        label1.Left -= 45;
                        break;
    
                    case Keys.Right:
                        label1.Left += 45;
                        break;
                }
    Ответ написан
    Комментировать