Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2012, 19:23   #1
lowercase
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 88
По умолчанию C# Обработка нескольких нажатых одновременно клавиш

здраствуйте. решил сделать небольшую программу в windows для перемещения label (ну или рисунка, или вообще любого друго елемента) по форме по нажатию на клавиши.
в форме поставил keyPreview = true; на событии KeyDown оператором выбора перебераю клавиши
Код:
private void Form1_KeyDown(object sender, KeyEventArgs e) {
  switch(e.KeyCode){
    case Keys.Up: { label1.Top-=4; break; }
    case Keys.Down: { label1.Top+=4; break; }
    case Keys.Left: { label1.Left-=4; break; }
    case Keys.Right: { label1.Left+=4; break; }
  }
}
но проблема в том что в реагирует только на одну клавишу не зависимо от того нажата ли еще какаято. допустим я нажал стерлку вверх. держу ее. жму влево - начинается перемещение влево, а обработка нажатия кнопки вверх уже не выполняется.
как в играх, например персожнаж двигается одновременно вперед и влево. или в машина так же едит вперед но еще и поворачивает. собственно как можна сделать так чтобы реакция была на несколько нажатых клавиш одновременно?
lowercase вне форума Ответить с цитированием
Старый 27.05.2012, 20:44   #2
Reclaimer
 
Регистрация: 15.01.2012
Сообщений: 5
По умолчанию

Можно так:
Код:
        bool left, right, up, down;

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Up: { up = true; break; }
                case Keys.Down: { down = true; break; }
                case Keys.Left: { left = true; break; }
                case Keys.Right: { right = true; break; }
            }
            if (up) y -= 1;
            if (down) y += 1;
            if (left) x -= 1;
            if (right) x += 1;
        }

        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Up: { up = false; break; }
                case Keys.Down: { down = false; break; }
                case Keys.Left: { left = false; break; }
                case Keys.Right: { right = false; break; }
            }
        }
Reclaimer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отлов нескольких одновременно нажатых клавиш revaldo666 Win Api 4 14.02.2012 23:09
Перехват нажатых клавиш. -=Virus=- Общие вопросы Delphi 8 29.07.2011 17:11
Перехват нажатых клавиш sxem Общие вопросы Delphi 7 02.05.2010 23:31
Отлов одновременно нескольких клавиш. Alex Cones Общие вопросы Delphi 7 24.11.2009 17:11
Перехват нажатых клавиш AidarBik Общие вопросы Delphi 2 21.06.2007 20:11