Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > "Перекрывание" клавиши


Автор: Rays 8.12.2012, 20:25
Доброго времени суток!
Небольшая проблемка, до решения которой пока ни как не могу дойти. Может, вы что посоветуете. 
По нажатию клавиш происходят разные события. По нажатию клавиши добавляю в таймер событие, при отпускании, соответсвенно, удаляю.

Вот так я добавляю событие  W в timer.Tick:
Код

private void FormAction_KeyDown(object sender, KeyEventArgs e)
        {
            if (!openPaint)
                return;
            switch (e.KeyCode)
            {
                case Keys.W:
                    {
                        if (Wchek)
                        {
                            Direction[0] = true; 
                            timer.Tick += W;
                            Wchek = false;
                        }
                        break;
                    }


Вот так убираю:
Код

private void FormAction_KeyUp(object sender, KeyEventArgs e)
        {
            if (!openPaint)
                return;
            switch (e.KeyData)
            {
                case Keys.W:
                    {
                        timer.Tick -= W;
                        Wchek = true;
                        Direction[0] = false; 
                        break;
                    }


Вот само событие W, если нужно:
Код

private void W(object sender, EventArgs e)
        {
            space.Back();
            DrawToBuffer(grafx.Graphics);
            this.Refresh();
        }


Вроде все равно и работает. Нажимаю клавишу, фигрука движется, отжимаю - останавливается. Но если при зажатой W нажать, к примеру, shift, а затем W отжать, фигурка не остановится, код по событию KeyUp не выполнится. 
Вот почему так происходит? Как исправить?)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)