winform處理特殊按鍵的好方法

一個winform,如果想讓上面的控件處理普通按鍵,那麼keyup keydown就行了,但是特殊按鍵就不行了,比如tab ,按下後就會在form上的控件間來回切換焦點,上下左右箭頭也不行,要麼會自動滾動條,要麼就在能接收上下按鍵的控件比如combobox上處理。或者按下alt+f4,窗體直接就關閉了。

 

總之我想要的是,窗體只接收按鍵,我自己處理,窗體和控件不處理。

 

最後找到了一個好辦法,一個外國人說的。

 

 

首先加上如

public partial class Form1 : Form,IMessageFilter

然後在form的構造函數加上,如

        public Form1()
        {
            Application.AddMessageFilter(this);
            InitializeComponent();
        }

然後加上

        const int WM_KEYDOWN = 0x100;
        const int WM_SYSKEYDOWN = 0x104;
        const int WM_KEYUP = 0x101;
        const int WM_SYSKEYUP = 0x105;
        public bool PreFilterMessage(ref Message m)
        {
            if (m.Msg == WM_KEYDOWN || m.Msg == WM_KEYUP || m.Msg == WM_SYSKEYDOWN || m.Msg == WM_SYSKEYUP)
            {

                //你的處理代碼
                return true;
            }
            else
                return false;
        }

 

 

這樣窗體上的控件就不響應按鍵了,你就可以在“你的處理代碼”那裏添加自己的處理方法了。

我試了一下

1、整個鍵盤所有鍵都可以攔截到按下和擡起的消息,只有一個print鍵,只能響應到擡起,按下收不到。

2、alt+f4不再關閉窗體了

3、alt鍵被稱爲menu

4、alt+tab和ctrl+alt+del組合攔截不到,還是會被切換,這是系統組合鍵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章