一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

c# keydown keypress keyup

 凱之風(fēng) 2011-08-22

Windows窗體通過(guò)引發(fā)鍵盤事件來(lái)處理鍵盤輸入以響應(yīng)Windows消息,大多數(shù)Windows窗體應(yīng)用程序都通過(guò)處理鍵盤事件來(lái)以獨(dú)占方式處理鍵盤輸入。

1.按鍵的類型

  Windows窗體將鍵盤輸入標(biāo)識(shí)為由按位Keys枚舉表示的虛擬鍵代碼。使用Keys枚舉,可以綜合一系列按鍵以生成單個(gè)值,這些值與WM_KEYDOWN和WM_SYSKEYDOWNWindows消息所伴隨的值相對(duì)應(yīng)。另外,程序開(kāi)發(fā)人員可通過(guò)處理KeyDown或KeyUp 事件來(lái)檢測(cè)大多數(shù)物理按鍵操作。字符鍵是Keys枚舉的子集,它們與WM_CHAR和WM_SYSCHAR Windows消息所伴隨的值相對(duì)應(yīng),如果通過(guò)組合按鍵得到一個(gè)字符,則可以通過(guò)處理KeyPress事件來(lái)檢測(cè)該字符。

2.鍵盤事件的順序

  一個(gè)控件上可能出現(xiàn)3個(gè)與鍵盤相關(guān)的事件,下面是這些事件發(fā)生的常規(guī)順序:

  • 用戶按“a”鍵,該鍵將被預(yù)處理和調(diào)度,而且會(huì)發(fā)生KeyDown事件。
  • 用戶按住“a”鍵,該鍵將被預(yù)處理和調(diào)度,而且會(huì)發(fā)生KeyPress事件。
  • 用戶松開(kāi)“a”鍵,該鍵將被預(yù)處理和調(diào)度,而且會(huì)發(fā)生KeyUp事件。

3.鍵的預(yù)處理

  像其他消息一樣,鍵盤消息是在窗體或控件的WndProc方法中處理的。窗體或控件在處理鍵盤消息之前,PreProcessMessage方法會(huì)調(diào)用一個(gè)或多個(gè)方法,這些方法可被重寫以處理特殊的字符鍵和物理按鍵。

/*********************/

  1. 鍵事件按下列順序發(fā)生:
    1. KeyDown
    2. KeyPress
    3. KeyUp
  2. KeyDown觸發(fā)后,不一定觸發(fā)KeyUp,當(dāng)KeyDown 按下后,拖動(dòng)鼠標(biāo),那么將不會(huì)觸發(fā)KeyUp事件。
  3. 定義
    1. KeyDown:在控件有焦點(diǎn)的情況下按下鍵時(shí)發(fā)生。
    2. KeyPress:在控件有焦點(diǎn)的情況下按下鍵時(shí)發(fā)生。(下面會(huì)說(shuō)和KeyDown 的區(qū)別)
    3. KeyUp:在控件有焦點(diǎn)的情況下釋放鍵時(shí)發(fā)生。
  4. KeyPress 和KeyDown 、KeyPress之間的區(qū)別
    1. KeyPress主要用來(lái)捕獲數(shù)字(注意:包括Shift+數(shù)字的符號(hào))、字母(注意:包括大小寫)、小鍵盤等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜單鍵}、{開(kāi)始鍵}和方向鍵外的ANSI字符
    2. KeyDown 和KeyUp 通常可以捕獲鍵盤除了PrScrn所有按鍵(這里不討論特殊鍵盤的特殊鍵)
    3. KeyPress 只能捕獲單個(gè)字符
    4. KeyDown 和KeyUp 可以捕獲組合鍵。
    5. KeyPress 可以捕獲單個(gè)字符的大小寫
    6. KeyDown和KeyUp 對(duì)于單個(gè)字符捕獲的KeyValue 都是一個(gè)值,也就是不能判斷單個(gè)字符的大小寫。
    7. KeyPress 不區(qū)分小鍵盤和主鍵盤的數(shù)字字符。
    8. KeyDown 和KeyUp 區(qū)分小鍵盤和主鍵盤的數(shù)字字符。
    9. 其中PrScrn 按鍵KeyPress、KeyDown和KeyUp 都不能捕獲。

5. 系統(tǒng)組合鍵的判定

    在使用鍵盤的時(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)判定 )
 

6. 捕獲PrScrn按鍵事件

通過(guò)一種鉤子的方式可以判定PrScrn 按鍵事件,鉤子可以獲取任何鍵盤事件。

 

/*******************/

其實(shí)我們按下一個(gè)鍵時(shí),KeyDownKeyPress是都要發(fā)生的,而且兩個(gè)人看上去沒(méi)有什么區(qū)別。但是其實(shí)兩者還是有實(shí)質(zhì)的區(qū)別的。

例如在一個(gè)多行文本框里面輸入字符,為什么我們沒(méi)有定義一個(gè)鍵盤響應(yīng)事件,但是鍵盤卻響應(yīng)了,把字符輸入到了文本框呢?其實(shí)我覺(jué)得因?yàn)檫@個(gè)事件就是系統(tǒng)默認(rèn)的一個(gè)消息響應(yīng),它就是KeyPress。如果你自己還給KeyPress定義了自己的響應(yīng)的話,那么程序會(huì)先執(zhí)行你定義的程序,然后完成系統(tǒng)要求的顯示字符事件的響應(yīng)過(guò)程,但是如果你在自己定義KeyPress事件如:private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)里面增加語(yǔ)句:e.Handled=true;那么系統(tǒng)要求的顯示字符響應(yīng)過(guò)程就不會(huì)被執(zhí)行,原因就是這個(gè)語(yǔ)句的意思就是這個(gè)消息響應(yīng)已經(jīng)完成。但是如果你在KeyDown,KeyUp里面加這條語(yǔ)句,顯示字符串等消息還是會(huì)發(fā)生,這說(shuō)明系統(tǒng)的顯示字符串和KeyDown,KeyUp是沒(méi)有關(guān)系的,而對(duì)于回車和退格消息響應(yīng)則是由KeyDown控制,增加那條語(yǔ)句則回車換行不會(huì)執(zhí)行,退格響應(yīng)也不會(huì)執(zhí)行。

綜上:要屏蔽鍵盤上的一個(gè)字符的輸入,可以在KeyPress里面進(jìn)行增加語(yǔ)句,而要屏蔽回車和退格則可以在KeyDown里面進(jìn)行增加語(yǔ)句。


if (e.Shift == True)
G_str_Mode = "Shift 鍵被按下";
if (e.Control == True)
G_str_Mode = "Ctrl 鍵被按下";
if (e.Alt == True)
G_str_Mode = "Alt 鍵被按下";

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲中文字幕综合网在线| 亚洲视频一级二级三级| 免费特黄欧美亚洲黄片| 欧美国产日产在线观看| 亚洲中文在线观看小视频| 国产在线成人免费高清观看av| 亚洲最新中文字幕在线视频| 国产亚洲欧美日韩精品一区 | 中文字幕禁断介一区二区| 欧美午夜一级特黄大片| 国产一区二区三区精品免费| 国产精品一区二区丝袜| 国产在线一区二区免费| 日本深夜福利在线播放| 爱草草在线观看免费视频| 高清一区二区三区不卡免费| 日韩不卡一区二区视频| 日本一区不卡在线观看| 国产欧美亚洲精品自拍| 翘臀少妇成人一区二区| 欧美日韩久久精品一区二区| 国产成人免费激情视频| 欧美日韩在线视频一区| 视频一区二区 国产精品| 观看日韩精品在线视频| 欧美野外在线刺激在线观看 | 日韩少妇人妻中文字幕| 久久热中文字幕在线视频| 日韩日韩欧美国产精品| 国产精品第一香蕉视频| 欧美色欧美亚洲日在线| 美女露小粉嫩91精品久久久| 久久99亚洲小姐精品综合| 午夜福利国产精品不卡| 亚洲清纯一区二区三区| 最新国产欧美精品91| 午夜福利92在线观看| 亚洲国产欧美精品久久| 美女被后入视频在线观看| 国产免费成人激情视频| 亚洲一区二区三区在线中文字幕|