none
Захват отпускания кнопки. RRS feed

  • Вопрос

  • Я знаю код захвата нажатия клавиши, но мне нужен захват отпускания.

    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.

    24 апреля 2012 г. 10:21

Ответы

  • Не очень понятен вопрос, но если вы про то, что в приложении пользователь зажал и держит клавишу, а потом вам надо отследить момент когда он ее отпустил, то в WPF приложениях вы можете использовать событие KeyUp. В WinForms оно, вроде, также называется.
    Или вы имели в виду нечто другое?
    • Помечено в качестве ответа Doctor Gordon 24 апреля 2012 г. 11:04
    24 апреля 2012 г. 10:31
    Отвечающий

Все ответы

  • Не очень понятен вопрос, но если вы про то, что в приложении пользователь зажал и держит клавишу, а потом вам надо отследить момент когда он ее отпустил, то в WPF приложениях вы можете использовать событие KeyUp. В WinForms оно, вроде, также называется.
    Или вы имели в виду нечто другое?
    • Помечено в качестве ответа Doctor Gordon 24 апреля 2012 г. 11:04
    24 апреля 2012 г. 10:31
    Отвечающий
  • Не очень понятен вопрос, но если вы про то, что в приложении пользователь зажал и держит клавишу, а потом вам надо отследить момент когда он ее отпустил, то в WPF приложениях вы можете использовать событие KeyUp. В WinForms оно, вроде, также называется.
    Или вы имели в виду нечто другое?

    Всё правильно, но KeyUp работает не нормально как и KeyDown, и поэтому я использую следующий код для захвата нажатия клавиши:

            protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                switch (keyData)
                {
                    case Keys.Up:
                        {
                            MessageBox.Show("Up");
                            break;
                        }
                }
                return base.ProcessCmdKey(ref msg, keyData);
            }
    Но оно захватывает нажатие клавиши, нужно чтото на подобии него, а не KeyUp, KeyUp не работает если фокус не на элементе.


    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.


    24 апреля 2012 г. 10:33
  • Если у вас проблема с фокусом, то в WinForms у формы есть свойство keyPreview. Если его установить в true, то все нажатия клавиш будут приходить сначала в нее, а потом в тот контрол в котором фокус. Если у вас приложение WPF, то в форму оно будет приходить в любом случае.

    Т.е. если вы хотите перехватывать все нажатия клавиш на форме (Form, Window), то вам и обработчик надо у формы (Form, Window), только в WinForm еще 1 настройку надо будет сделать. (см выше).



    24 апреля 2012 г. 10:44
    Отвечающий
  • Если у вас проблема с фокусом, то в WinForms у формы есть свойство keyPreview. Если его установить в true, то все нажатия клавиш будут приходить в сначала в нее, а потом в тот контрол в котором фокус. Если у вас приложение WPF, то в форму оно будет приходить в любом случае.

    Т.е. если вы хотите перехватывать все нажатия клавиш на форме (Form, Window), то вам и обработчик надо у формы (Form, Window), только в WinForm еще 1 настройку надо будет сделать. (см выше).


    Я помню раньше оно работало не исправно, если выйдет снова проблема я вам покажу.

    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.


    24 апреля 2012 г. 11:01
  • Да, будет лучше всего если вы приведете неработающий пример, так проще будет вам помочь. По возможности еще опишите что находится на форме и в какой момент и на чем нужно отловить KeyUp.


    Для связи [mail]

    24 апреля 2012 г. 11:04
  • Да, будет лучше всего если вы приведете неработающий пример, так проще будет вам помочь. По возможности еще опишите что находится на форме и в какой момент и на чем нужно отловить KeyUp.


    Для связи [mail]

    Если снова встретиться проблема я покажу вам, а пока всё норма.

    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.

    24 апреля 2012 г. 11:04
  • Вот проблема о которой я говорил:

    http://www.youtube.com/watch?v=pxXR86sPMyg&feature=youtu.be

    Думаю дело в фокусе.


    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.

    28 апреля 2012 г. 18:06
  • Попробуйте так:

        public partial class Form1 : Form
        {
            private static int WM_KEYUP = 0x0101;
    
            public Form1()
            {
                InitializeComponent();
                this.KeyPreview = true;
            }
    
            protected override bool ProcessKeyEventArgs(ref Message m)
            {
                //MessageBox.Show(m.Msg.ToString());
                if (m.Msg == WM_KEYUP)
                {
                    switch (m.WParam.ToInt32())
                    {
                        case (int)Keys.Up:
                            MessageBox.Show("up");
                            break;
                        case (int)Keys.Down:
                            MessageBox.Show("down");
                            break;
                        case (int)Keys.Left:
                            MessageBox.Show("left");
                            break;
                        case (int)Keys.Right:
                            MessageBox.Show("right");
                            break;
                    }
                }
                    
                return base.ProcessKeyEventArgs(ref m);
            }
        }


    Для связи [mail]

    28 апреля 2012 г. 20:59
  • Попробуйте так:

    Ясно, если метод реагирует на отпускание мышки то это то что надо, но это трудно для моего понимания.


    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.

    29 апреля 2012 г. 7:13