程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> Visual C# 2005實現控件中捕獲按鍵

Visual C# 2005實現控件中捕獲按鍵

編輯:C#基礎知識

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

  

  圖CH8_DemoForm004.cs運行畫面

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

  您並非一定要使用msg參數,也就是說,您可以忽略它。不過利用msg參數來檢測窗口信息倒是一項不錯的選擇。在稍後的程序范例中,我們會去檢測窗口信息是否為WM_KEYDOWN,以便確認這是一個按鍵事件。此外,我們也會去檢測窗口信息是否為WM_SYSKEYDOWN,以便確認按鍵組合是否包含輔助按鍵。

  由於DataGridView控件的狀況最為復雜,因而在此我們就要示范如何在DataGridView控件中捕捉按鍵,請切記,您可以將同樣的方法應用在其他的控件中。圖2所示是程序范例CH8_DemoForm004.cs的運行畫面,從窗體的標題欄變化可以看出,只要DataGridView控件取得焦點,不論它是否顯示數據,都能夠捕捉用戶在DataGridView控件中的按鍵。顯而易見地,本程序范例的關鍵在於必須根據DataGridView控件派生出一個新的類並重寫其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 = "向下鍵已經被捕捉";
     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;
   }
  }
  return base.ProcessCmdKey(ref msg, keyData);
 }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved