C#中KeyData、KeyCode、KeyValue和KeyChar的區別


轉自:https://www.cnblogs.com/YangBinChina/archive/2013/03/27/2984281.html

KeyCode最為常用,記錄了鍵盤上按了哪個鍵,當使用組合鍵時如ctrl+a,其值是"A";

KeyData可以記錄組合鍵,當使用組合鍵時如ctrl+a時,其值為"A,ctrl";

KeyValue則是KeyCode的數字值,當使用組合鍵時如ctrl+a時,其值為65(A),注意不是97(a);

注意:這三個屬性對於字母鍵只記錄其大寫的值(不管你是否開啟了caplock或是按下shift鍵),如果一定要區分到底是大小寫,可以使用KeyChar來判斷。

KeyPress事件
KeyPressEventArgs參數

Handled /是否處理過KeyPress事件
KeyChar //按下的鍵對應的字符

如果I,則keychar為i,如果shift+i,則keychar為I。
如果是Ctrl+I,或ALt+I,根本不會得到一個keypress事件,因為他們是特殊的鍵序列,並非通過KeyPress發送。
需要KeyDown

KeyDown
KeyEventArgs參數
   Alt 獲取一個值,該值指示是否曾按下 Alt 鍵。 
   Control 獲取一個值,該值指示是否曾按下 Ctrl 鍵。 
   Handled 獲取或設置一個值,該值指示是否處理過此事件。 
   KeyCode 獲取 KeyDown 或 KeyUp 事件的鍵盤代碼。 
   KeyData 獲取 KeyDown 或 KeyUp 事件的鍵數據。 
   KeyValue 獲取 KeyDown 或 KeyUp 事件的鍵盤值。 
   Modifiers 獲取 KeyDown 或 KeyUp 事件的修飾符標志。這些標志指示按下的 Ctrl、Shift 和 Alt 鍵的組合。 
   Shift 獲取一個值,該值指示是否曾按下 Shift 鍵。 
SuppressKeyPress 獲取或設置一個值,該值指示鍵事件是否應傳遞到基礎控件。 


如果同時按下了Ctrl+Shift+I
KeyData   Keys.Ctrl+Keys。Shift+Keys。I
KeyCode Keys。I
Modifiers Keys。Ctrl+Keys。Shift
Alt false
Ctrl true
Shift true
KeyValue 73
KeyChar 不可用

盡管我們處理了KeyDown來獲得特殊的字符,但是有些特殊字符(比如箭頭鍵)在默認的情況下並不傳送給控件。為了啟用他們,自定義控件可以重寫來自基類的IsInputKey方法


如果想在鍵盤事件之外獲悉修飾鍵的狀態,可以通過Control類的靜態屬性ModifierKeys來訪問這類信息。

void MyCon-Click(object sender,EventArgs e)
{
if(Control.ModifierKeys==Keys.Control)
{
}
}
檢查在鼠標點擊事件中,Ctrl鍵是否是唯一被按下的修飾鍵。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM