成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

Visual C# 2005如何在控件中捕捉按鍵

2010-08-28 10:50:09來源:西部e網作者:

如何于Windows Form控件中捕捉按鍵向來是許多程序設計師所關心的課題,基本上,標準的KeyUp、KeyDown與KeyPress事件就足以去捕捉并處理按鍵。然而問題在于,并非所有的控件會在所有的情況下為所有的按鍵操作產生這些事件。

\

圖8.2CH8_DemoForm004.cs運行畫面

第8章探討重要的人機界面設計技巧如果您希望不管控件的狀況如何,都能夠順利地捕捉WindowsForm控件中的按鍵,必須根據該控件的類派生出一個新的類并重寫ProcessCmdKey方法,并在此重寫方法中編寫程序代碼來捕捉并處理您所需的按鍵。系統會傳遞兩個參數給ProcessCmdKey方法:msg與keyData。msg參數含有所要處理的窗口信息(例如:WM_KEYDOWN),此窗口信息是以傳址方式傳遞的。keyData參數則會含有被按下的按鍵的按鍵碼,也就是其中一個Keys值(注意,keyData參數的類型是Keys枚舉類型)。如果CTRL或ALT鍵也被按下,keyData參數還會含有輔助按鍵(Modifier Key)信息。
您并非一定要使用msg參數,也就是說,您可以忽略它。不過利用msg參數來檢測窗口信息倒是一項不錯的選擇。在稍后的程序范例中,我們會去檢測窗口信息是否為WM_KEYDOWN,以便確認這是一個按鍵事件。此外,我們也會去檢測窗口信息是否為WM_SYSKEYDOWN,以便確認按鍵組合是否包含輔助按鍵。
由于DataGridView控件的狀況最為復雜,因而在此我們就要示范如何在DataGridView控件中捕捉按鍵,請切記,您可以將同樣的方法應用在其他的控件中。圖82所示是程序范例CH8_DemoForm004.cs的運行畫面,從窗體的標題欄變化可以看出,只要DataGridView控件取得焦點,不論它是否顯示數據,都能夠捕捉用戶在DataGridView控件中的按鍵。顯而易見地,本程序范例的關鍵在于必須根據DataGridView控件派生出一個新的類并重寫其ProcessCmdKey方法。這里將派生類MyDataGridView的程序代碼列示如下(編寫在MyDataGridView.cs中):
publicpartialclass MyDataGridView :

System.Windows.Forms.DataGridView

{

...

...

protectedoverridebool ProcessCmdKey(

ref Message msg, Keys keyData)

{

constint WM_KEYDOWN =0x100;

constint WM_SYSKEYDOWN =0x104;



if ((msg.Msg == WM_KEYDOWN) ||

(msg.Msg
== WM_SYSKEYDOWN))

{

switch (keyData)

{

case Keys.Down:

this.Parent.Text ="向下鍵已經被捕捉";

break;

case Keys.Up:

this.Parent.Text ="向上鍵已經被捕捉";

break;

case Keys.Left:

this.Parent.Text ="向左鍵已經被捕捉";

break;

case Keys.Right:

this.Parent.Text ="向右鍵已經被捕捉";

break;

case Keys.Home:

this.Parent.Text ="Home 鍵已經被捕捉";

break;

case Keys.End:

this.Parent.Text ="End 鍵已經被捕捉";

break;

}

}



returnbase.ProcessCmdKey(ref msg, keyData);

}

}
關鍵詞:VS.NET
主站蜘蛛池模板: 靖边县| 义马市| 隆子县| 敦化市| 邵东县| 原平市| 灌阳县| 栾城县| 含山县| 志丹县| 大埔区| 泰州市| 高邮市| 滨海县| 临猗县| 鲜城| 宁南县| 千阳县| 嘉禾县| 尚志市| 正定县| 大邑县| 阳春市| 沈阳市| 全州县| 武强县| 商洛市| 繁昌县| 吴桥县| 罗定市| 微博| 句容市| 贵港市| 岚皋县| 兰坪| 泗洪县| 义乌市| 慈溪市| 池州市| 赣州市| 密山市|