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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2012, 19:53   #1
Alek-de-Mik
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 44
По умолчанию C#|Обработка отжатия клавиши.

Нужно обрабатывать одновременное нажатие двух клавиш, сделал своего рода обработчик, но для того что бы о работал мне нужно знать когда клавиша отжимается, подскажите как это можно сделать?
Вот код:
Код:
 Keys keys = Control.ModifierKeys;

                 if(e.KeyCode == Keys.Up)
                   Offset.Y = Offset.Y - 1F;
                  
                 if(keys == Keys.Up)
                 {
                     if(e.KeyCode == Keys.Right){
                          while (true){
                              if (e.KeyCode != Keys.Up)
                                  break;
                              else
                                  Offset.Y = Offset.Y - 1.5F;
                                  Offset.X = Offset.X + 1.5F;
                          }
                     }
                 }
Alek-de-Mik вне форума Ответить с цитированием
Старый 08.09.2012, 21:41   #2
Alek-de-Mik
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 44
По умолчанию

Попытался сделать так, вызываю событие нажатия клавиш и при нажатии ставлю флаг true,после вызываю событие отрабатывающее отжатие и в нем меняю флаг на false, потом просто проверяю какие клавиши были нажаты и запускаю цикл, до отжати, но теперь программа виснет, подскажите, что не так?
Код:
public static bool[] keys_flag = new bool[4];
private void View_Transform_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
         {
             e.IsInputKey = true;

             if (e.KeyCode == Keys.Up)
             {
                 keys_flag[0] = true;
                 Offset.Y = Offset.Y - 1F;
             }

                 if(keys_flag[0] == true)
                 {
                     if(keys_flag[3] == true){
                          while (true){
                              if (keys_flag[0] == false && keys_flag[3] == true || keys_flag[0] == true && keys_flag[3] == false || keys_flag[0] == false && keys_flag[3] == false)
                                  break;
                              else
                                  Offset.Y = Offset.Y - 1.5F;
                                  Offset.X = Offset.X + 1.5F;
                                  Invalidate();
                          }
                     }
                 }

                 if (e.KeyCode == Keys.Down)
                 {
                     keys_flag[1] = true;
                     Offset.Y = Offset.Y + 1F;
                 }

                 if (e.KeyCode == Keys.Left)
                 {
                     keys_flag[2] = true;
                     Offset.X = Offset.X - 1F;
                 }

                 if (e.KeyCode == Keys.Right)
                 {
                     keys_flag[3] = true;
                     Offset.X = Offset.X + 1F;
                 }
}
private void View_Transform_KeyUp(object sender, KeyEventArgs e)
         {
             if (e.KeyCode == Keys.Up)
                 keys_flag[0] = false;

             if (e.KeyCode == Keys.Down)
                 keys_flag[1] = false;

             if (e.KeyCode == Keys.Left)
                 keys_flag[2] = false;

             if (e.KeyCode == Keys.Right)
                 keys_flag[3] = false;
         }
Alek-de-Mik вне форума Ответить с цитированием
Старый 09.09.2012, 06:27   #3
Alek-de-Mik
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 44
По умолчанию

Эх вы форумчане, вот решение моей проблемы.
Код:
 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; }
}
}
Alek-de-Mik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка события от нажатия клавиши мыши. es4e Помощь студентам 2 16.02.2011 21:24
Делфи, обработка клавиши nk2901 Помощь студентам 3 27.01.2011 23:44
Как записать в массив время нажатия, отжатия клавиш Berta Помощь студентам 4 06.04.2010 17:29
Обработка сообщения отжатия левой кнопки мыши на компоненте TrackBar CyberJohn Общие вопросы Delphi 5 08.02.2009 12:34
глобальный хук & событие отжатия клавиши Nowichok Общие вопросы Delphi 9 24.11.2006 17:51