KeyPress 和KeyDown 、KeyPress之间的区别
(一)鍵事件按下列順序發(fā)生:
KeyDown
KeyPress
KeyUp
(二)KeyDown觸發(fā)后,不一定觸發(fā)KeyUp,當(dāng)KeyDown 按下后,拖動(dòng)鼠標(biāo),那么將不會(huì)觸發(fā)KeyUp事件。
(三)定義
KeyDown:在控件有焦點(diǎn)的情況下按下鍵時(shí)發(fā)生。
KeyPress:在控件有焦點(diǎn)的情況下按下鍵時(shí)發(fā)生。(下面會(huì)說(shuō)和KeyDown 的區(qū)別)
KeyUp:在控件有焦點(diǎn)的情況下釋放鍵時(shí)發(fā)生。
(四)KeyPress 和KeyDown 、KeyPress之間的區(qū)別
1.KeyPress主要用來(lái)捕獲數(shù)字(注意:包括Shift+數(shù)字的符號(hào))、字母(注意:包括大小寫(xiě))、小鍵盤(pán)等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜單鍵}、{開(kāi)始鍵}和方向鍵外的ANSI字符KeyDown 和KeyUp 通常可以捕獲鍵盤(pán)除了PrScrn所有按鍵(這里不討論特殊鍵盤(pán)的特殊鍵)
2.KeyPress 只能捕獲單個(gè)字符KeyDown 和KeyUp 可以捕獲組合鍵。
3.KeyPress 可以捕獲單個(gè)字符的大小寫(xiě)
4.KeyDown和KeyUp 對(duì)于單個(gè)字符捕獲的KeyValue都是一個(gè)值,也就是不能判斷單個(gè)字符的大小寫(xiě)。
5.KeyPress 不區(qū)分小鍵盤(pán)和主鍵盤(pán)的數(shù)字字符。KeyDown 和KeyUp 區(qū)分小鍵盤(pán)和主鍵盤(pán)的數(shù)字字符。
6.其中PrScrn 按鍵KeyPress、KeyDown和KeyUp 都不能捕獲。
(五)系統(tǒng)組合鍵的判定
在使用鍵盤(pán)的時(shí)候,通常會(huì)使用到CTRL+SHIFT+ALT 類似的組合鍵功能。對(duì)于此,我們?nèi)绾蝸?lái)判定?
通過(guò)KeyUp 事件能夠來(lái)處理(這里說(shuō)明一下為什么不用KeyDown,因?yàn)樵谂卸↘eyDown的時(shí)候,CTRL、SHIFT和ALT 屬于一直按下?tīng)顟B(tài),然后再加另外一個(gè)鍵是不能準(zhǔn)確捕獲組合鍵,所以使用KeyDown 是不能準(zhǔn)確判斷出的,要通過(guò)KeyUp 事件來(lái)判定)
1.KeyDown事件
KeyDown事件在首次按下某個(gè)鍵時(shí)發(fā)生。
示例 KeyDown事件的使用
本示例中,判斷用戶是否按下特殊鍵,如果是,則顯示在窗體的標(biāo)題欄上。
程序主要代碼如下。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
string G_str_Mode = "";
string G_str_text = e.KeyCode + ":" + e.Modifiers + ":" + e.KeyData + ":" + "(" + e.KeyValue + ")";
if (e.Shift == true)
G_str_Mode = "Shift 鍵被按下";
if (e.Control == true)
G_str_Mode = "Ctrl 鍵被按下";
if (e.Alt == true)
G_str_Mode = "Alt 鍵被按下";
this.Text = G_str_text + G_str_Mode;
}
注意:上面的代碼中,KeyDown事件取得了一個(gè)KeyEventArgs對(duì)象e,并返回相關(guān)的按鍵信息,KeyEventArgs參數(shù)提供數(shù)個(gè)屬性值,這些屬性根據(jù)鍵盤(pán)上被按下的按鍵返回對(duì)應(yīng)值。KeyEventArgs參數(shù)的屬性值如表所示。
表 KeyEventArgs屬性值
| 屬性值 | 說(shuō)明 |
| Control | 獲取一個(gè)值,該值指示是否曾按下Ctrl鍵 |
| KeyCode | 獲取KeyDown或KeyUp事件的鍵盤(pán)代碼 |
| KeyData | 獲取KeyDown或KeyUp事件的鍵數(shù)據(jù) |
| KeyData | 獲取KeyDown或KeyUp事件的鍵數(shù)據(jù) |
| KeyValue | 獲取KeyDown或KeyUp事件的鍵盤(pán)值 |
| Modifiers | 獲取KeyDown或KeyUp事件的修飾符標(biāo)志。這些標(biāo)志指示按下的Ctrl、Shift和Alt鍵的組合 |
| Shift | 獲取一個(gè)值,該值指示是否曾按下Shift鍵 |
2.Keyup事件
Keyup事件在釋放鍵時(shí)發(fā)生。
示例 Keyup事件的使用
本示例實(shí)現(xiàn)的是,當(dāng)程序運(yùn)行的時(shí)候,按完鍵盤(pán)后,自動(dòng)設(shè)置窗體的大小。
程序主要代碼如下。
private void frmKeyDownUP_KeyUp(object sender, KeyEventArgs e)
{
this.ClientSize = new System.Drawing.Size(800,100);
}
(一)鍵事件按下列順序發(fā)生:
KeyDown
KeyPress
KeyUp
(二)KeyDown觸發(fā)后,不一定觸發(fā)KeyUp,當(dāng)KeyDown 按下后,拖動(dòng)鼠標(biāo),那么將不會(huì)觸發(fā)KeyUp事件。
(三)定義
KeyDown:在控件有焦點(diǎn)的情況下按下鍵時(shí)發(fā)生。
KeyPress:在控件有焦點(diǎn)的情況下按下鍵時(shí)發(fā)生。(下面會(huì)說(shuō)和KeyDown 的區(qū)別)
KeyUp:在控件有焦點(diǎn)的情況下釋放鍵時(shí)發(fā)生。
(四)KeyPress 和KeyDown 、KeyPress之間的區(qū)別
1.KeyPress主要用來(lái)捕獲數(shù)字(注意:包括Shift+數(shù)字的符號(hào))、字母(注意:包括大小寫(xiě))、小鍵盤(pán)等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜單鍵}、{開(kāi)始鍵}和方向鍵外的ANSI字符KeyDown 和KeyUp 通常可以捕獲鍵盤(pán)除了PrScrn所有按鍵(這里不討論特殊鍵盤(pán)的特殊鍵)
2.KeyPress 只能捕獲單個(gè)字符KeyDown 和KeyUp 可以捕獲組合鍵。
3.KeyPress 可以捕獲單個(gè)字符的大小寫(xiě)
4.KeyDown和KeyUp 對(duì)于單個(gè)字符捕獲的KeyValue都是一個(gè)值,也就是不能判斷單個(gè)字符的大小寫(xiě)。
5.KeyPress 不區(qū)分小鍵盤(pán)和主鍵盤(pán)的數(shù)字字符。KeyDown 和KeyUp 區(qū)分小鍵盤(pán)和主鍵盤(pán)的數(shù)字字符。
6.其中PrScrn 按鍵KeyPress、KeyDown和KeyUp 都不能捕獲。
(五)系統(tǒng)組合鍵的判定
在使用鍵盤(pán)的時(shí)候,通常會(huì)使用到CTRL+SHIFT+ALT 類似的組合鍵功能。對(duì)于此,我們?nèi)绾蝸?lái)判定?
通過(guò)KeyUp 事件能夠來(lái)處理(這里說(shuō)明一下為什么不用KeyDown,因?yàn)樵谂卸↘eyDown的時(shí)候,CTRL、SHIFT和ALT 屬于一直按下?tīng)顟B(tài),然后再加另外一個(gè)鍵是不能準(zhǔn)確捕獲組合鍵,所以使用KeyDown 是不能準(zhǔn)確判斷出的,要通過(guò)KeyUp 事件來(lái)判定)
1.KeyDown事件
KeyDown事件在首次按下某個(gè)鍵時(shí)發(fā)生。
示例 KeyDown事件的使用
本示例中,判斷用戶是否按下特殊鍵,如果是,則顯示在窗體的標(biāo)題欄上。
程序主要代碼如下。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
string G_str_Mode = "";
string G_str_text = e.KeyCode + ":" + e.Modifiers + ":" + e.KeyData + ":" + "(" + e.KeyValue + ")";
if (e.Shift == true)
G_str_Mode = "Shift 鍵被按下";
if (e.Control == true)
G_str_Mode = "Ctrl 鍵被按下";
if (e.Alt == true)
G_str_Mode = "Alt 鍵被按下";
this.Text = G_str_text + G_str_Mode;
}
注意:上面的代碼中,KeyDown事件取得了一個(gè)KeyEventArgs對(duì)象e,并返回相關(guān)的按鍵信息,KeyEventArgs參數(shù)提供數(shù)個(gè)屬性值,這些屬性根據(jù)鍵盤(pán)上被按下的按鍵返回對(duì)應(yīng)值。KeyEventArgs參數(shù)的屬性值如表所示。
表 KeyEventArgs屬性值
| 屬性值 | 說(shuō)明 |
| Control | 獲取一個(gè)值,該值指示是否曾按下Ctrl鍵 |
| KeyCode | 獲取KeyDown或KeyUp事件的鍵盤(pán)代碼 |
| KeyData | 獲取KeyDown或KeyUp事件的鍵數(shù)據(jù) |
| KeyData | 獲取KeyDown或KeyUp事件的鍵數(shù)據(jù) |
| KeyValue | 獲取KeyDown或KeyUp事件的鍵盤(pán)值 |
| Modifiers | 獲取KeyDown或KeyUp事件的修飾符標(biāo)志。這些標(biāo)志指示按下的Ctrl、Shift和Alt鍵的組合 |
| Shift | 獲取一個(gè)值,該值指示是否曾按下Shift鍵 |
2.Keyup事件
Keyup事件在釋放鍵時(shí)發(fā)生。
示例 Keyup事件的使用
本示例實(shí)現(xiàn)的是,當(dāng)程序運(yùn)行的時(shí)候,按完鍵盤(pán)后,自動(dòng)設(shè)置窗體的大小。
程序主要代碼如下。
private void frmKeyDownUP_KeyUp(object sender, KeyEventArgs e)
{
this.ClientSize = new System.Drawing.Size(800,100);
}
總結(jié)
以上是生活随笔為你收集整理的KeyPress 和KeyDown 、KeyPress之间的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在虚拟机上的关于Apache(阿帕奇)(
- 下一篇: 5 个免版权高清视频素材下载网站(一)