Ключ нажал на форму - PullRequest
       13

Ключ нажал на форму

0 голосов
/ 20 октября 2010

У меня есть приложение Windows Form, с формой, которая содержит 2 tabcontrols и сетку. Я хотел бы поймать нажатие клавиши Esc на любом из этих элементов управления. Вопрос в том, проще ли это сделать, не подписываясь на событие нажатия клавиши на каждом элементе управления?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 октября 2010

Вы можете просто сделать следующее. Реализуйте событие IMessageFilter и Handle Key Down. Вот полный код для подключения Escape Key Down.

public class MyKeboardHook:IMessageFilter
    {
        public const int WM_KEYDOWN = 0x0100;
        public const int VK_ESCAPE = 0x1B;
        public event EventHandler EscapeKeyDown;
        public bool PreFilterMessage(ref Message m)
        {
            if (m.Msg == WM_KEYDOWN && m.WParam == new IntPtr(VK_ESCAPE))
            {
                OnEscapeKeyPressed();
            }
            return false; //Do not Process anything
        }
        protected virtual void OnEscapeKeyDown()
        {
            if(this.EscapeKeyDown!=null)
            {
                EscapeKeyDown(this, EventArgs.Empty);
            }
        }
    }

Теперь вам нужно это зарегистрировать. Лучшее место было бы в Main

static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            MyKeboardHook myKeboardHook = new MyKeboardHook();
            myKeboardHook.EscapeKeyDown += (e, x) =>
                                                  {
                                                      MessageBox.Show("Escape Key Pressed");
                                                  };
            Application.AddMessageFilter(myKeboardHook);


            Application.Run(new Form1());

        }
    }
0 голосов
/ 20 октября 2010

Подписаться на событие в самой форме.

Если элемент управления не обрабатывает событие, он должен всплывать до формы, где он будет обрабатываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...