Задать вопрос
@Tolyambaqq

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

Не могу настроить управления с клавиатуры для label в c#

private void label1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs 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;
}
}
  • Вопрос задан
  • 533 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@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;
            }
Ответ написан
Комментировать
@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. Ну там системный фон, убрать окантовку и тд.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы