Visual C# 2005實(shí)現(xiàn)控件中捕獲按鍵
2006/12/13 9:29:15

  如何于Windows Form控件中捕捉按鍵向來(lái)是許多程序員所關(guān)心的課題,基本上,標(biāo)準(zhǔn)的KeyUp、KeyDown與KeyPress事件就足以去捕捉并處理按鍵。
    然而問題在于,并非所有的控件會(huì)在所有的情況下為所有的按鍵操作產(chǎn)生這些事件。
 
 
 
 
 
 
 
 


  

  圖CH8_DemoForm004.cs運(yùn)行畫面

  
 
 
      如果您希望不管控件的狀況如何,都能夠順利地捕捉Windows Form控件中的按鍵,必須根據(jù)該控件的類派生出一個(gè)新的類并重寫ProcessCmdKey方法,并在此重寫方法中編寫程序代碼來(lái)捕捉并處理您所需的按鍵。系統(tǒng)會(huì)傳遞兩個(gè)參數(shù)給ProcessCmdKey方法:msg與keyData。msg參數(shù)含有所要處理的窗口信息(例如:WM_KEYDOWN),此窗口信息是以傳址方式傳遞的。keyData參數(shù)則會(huì)含有被按下的按鍵的按鍵碼,也就是其中一個(gè)Keys值(注意,keyData參數(shù)的類型是Keys枚舉類型)。如果CTRL或ALT鍵也被按下,keyData參數(shù)還會(huì)含有輔助按鍵(Modifier Key)信息。

  您并非一定要使用msg參數(shù),也就是說(shuō),您可以忽略它。不過(guò)利用msg參數(shù)來(lái)檢測(cè)窗口信息倒是一項(xiàng)不錯(cuò)的選擇。在稍后的程序范例中,我們會(huì)去檢測(cè)窗口信息是否為WM_KEYDOWN,以便確認(rèn)這是一個(gè)按鍵事件。此外,我們也會(huì)去檢測(cè)窗口信息是否為WM_SYSKEYDOWN,以便確認(rèn)按鍵組合是否包含輔助按鍵。

  由于DataGridView控件的狀況最為復(fù)雜,因而在此我們就要示范如何在DataGridView控件中捕捉按鍵,請(qǐng)切記,您可以將同樣的方法應(yīng)用在其他的控件中。圖2所示是程序范例CH8_DemoForm004.cs的運(yùn)行畫面,從窗體的標(biāo)題欄變化可以看出,只要DataGridView控件取得焦點(diǎn),不論它是否顯示數(shù)據(jù),都能夠捕捉用戶在DataGridView控件中的按鍵。顯而易見地,本程序范例的關(guān)鍵在于必須根據(jù)DataGridView控件派生出一個(gè)新的類并重寫其ProcessCmdKey方法。這里將派生類MyDataGridView的程序代碼列示如下(編寫在MyDataGridView.cs中):

    public partial class MyDataGridView :
System.Windows.Forms.DataGridView
{
 ...
 ...
 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
 {
  const int WM_KEYDOWN = 0x100;
  const int WM_SYSKEYDOWN = 0x104;
  if ((msg.Msg == WM_KEYDOWN) ||(msg.Msg == WM_SYSKEYDOWN))
  {
   switch (keyData)
   {
    case Keys.Down:
     this.Parent.Text = "向下鍵已經(jīng)被捕捉";
     break;
    case Keys.Up:
     this.Parent.Text = "向上鍵已經(jīng)被捕捉";
     break;
    case Keys.Left:
     this.Parent.Text = "向左鍵已經(jīng)被捕捉";
     break;
    case Keys.Right:
     this.Parent.Text = "向右鍵已經(jīng)被捕捉";
     break;
    case Keys.Home:
     this.Parent.Text = "Home 鍵已經(jīng)被捕捉";
     break;
    case Keys.End:
     this.Parent.Text = "End 鍵已經(jīng)被捕捉";
     break;
   }
  }
  return base.ProcessCmdKey(ref msg, keyData);
 }
}

返回列表
返回首頁(yè) 主站蜘蛛池模板: 破了亲妺妺的处免费视频国产| 中国精品白嫩bbwbbw| 日本三级香港三级人妇99| 亚洲午夜精品久久久久久浪潮 | 午夜影视免费完整高清在线观看网站| 国产又大又粗又长免费视频| 国产视频手机在线观看| www天堂在线| 成人欧美一区二区三区| 久久亚洲国产精品| 最近中文字幕mv2018免费看| 亚洲成AV人片在线观看ww| 狠狠色丁香婷婷综合久久片| 午夜国产福利在线| 色噜噜狠狠狠狠色综合久| 国产婷婷一区二区三区| 菠萝视频在线完整版| 国产香蕉国产精品偷在线| chinesefree国语对白| 少妇人妻精品一区二区| 中文字幕免费观看视频| 日本公与熄乱理在线播放370| 乱人伦人妻中文字幕| 欧美乱妇高清无乱码亚洲欧美| 亚洲欧美综合另类| 爱情岛论坛亚洲永久入口口| 全部免费的毛片视频观看| 一级一级特黄女人精品毛片视频| 99热都是精品| 亚洲精品你懂的| 国产超薄肉色丝袜的免费网站 | 一级做a爰片久久毛片免费看| 日批视频在线免费看| 久久棈精品久久久久久噜噜| 最近中文字幕免费mv在线视频| 亚洲另类欧美综合久久图片区 | 成人毛片免费视频播放| 久久久99精品免费观看| 日本少妇高潮喷水xxxxxxx| 久久精品aⅴ无码中文字字幕不卡| 最近免费中文在线视频|