程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 在Visual Studio 2010中接受鍵盤輸入的技巧

在Visual Studio 2010中接受鍵盤輸入的技巧

編輯:關於.NET

一個成功的應用系統,總是離不開鍵盤的輸入。也就是說,應用軟件需要通過 鍵盤等工具,來與用戶進行交互。雖然這是一項基礎性的工作,但是其中還是包 含了很多技巧。在VisualStudio2010中,總的來說,還是通過處理鍵盤事件來接 受來自鍵盤的信息。筆者這裡就以Windows窗體為例,談談在接受鍵盤輸入時的一 些技巧。

一、Keydown事件。

Keydown事件是用戶敲擊鍵盤時觸發的一個事件。這是一個初始觸發事件,即 當用戶一按鍵盤時就觸發了這個事件。掌握好這個事件的相關內容,是開發人員 處理鍵盤輸入的基礎。筆者認為,可以從如下幾個方面來進行了解。

一是掌握KeyEventArgs參數。簡單的說,這個參數指定一個物理鍵盤按鈕。不 過隨著硬件的升級,其功能已經遠遠不止這麼一個了。如現在鍵盤上都有組合鍵 的功能。如現在需要在英文小寫狀態下輸入一個大寫的字符,則需要使用Shift與 任意一個字符的組合鍵。再如需要輸入數字鍵上面的特殊符合,也需要采用Shift 組合鍵等等。應用軟件需要判斷用戶是否使用了組合鍵,此時就需要借助這個參 數。也就是說,在VisualStudio2010中編寫代碼時,可能需要使用一個IF語句或 者其它類似的語法來判斷用戶是否采用了組合鍵。

二是了解Modiiers屬性的含義。注意,在這裡不能夠顧名思義。其實這個屬性 會跟上面這個參數結合使用。剛才我們講過,用戶可能在輸入時會使用組合鍵。 現在的一個問題時,我們常用的組合鍵有三個,分別為Shift、Ctrl和Alt。不同 的組合鍵與其它鍵結合,往往起到不同的效果。為此應用程序不僅要知道,用戶 是否同時按下了多個鍵,還需要了解,用戶按下的是哪個組合鍵。這個屬性就是 用來記錄用戶按下的是以上三個鍵中的哪一個。在編寫代碼的時候,可能需要使 用Case語句來根據用戶的行為在選擇不同的操作。

三是DeyDate屬性。在Windows操作系統中,可以同時按下Shift、Ctrl和Alt三 個鍵。此時系統會跳出任務管理器。在應用程序開發過程中,用戶可能也需要同 時按下這三個鍵來完成特定的任務。此時需要使用的屬性就是Keydata屬性。通常 情況下,開發人員可以使用來自Keys 的常數從Keydata屬性中提取信息。同時使 用And運算符(表示同時按下三個鍵)將由Keydata返回的數據與Keys中常數進行比 較,從而獲得有關用戶按下鍵的信息。

了解了這幾個參數與屬性之後,基本上就掌握了Keydown事件。筆者再次強調 一下,Keydows事件是應用程序接受鍵盤輸入的一個必須要經過的環節。開發人員 必須要掌握。

二、KeyPress事件。

這個事件也是在用戶按下鍵盤時觸發的。不過其觸發的順序比較晚。也就是說 ,在Keydown事件被成功觸發之後,才會觸發這個事件。兩者之間有先後的順序。 這是掌握這個事件時需要知道的第一個內容。

另外,這個Keypress事件也並不是對所有的鍵都敏感。一般來說,當用戶按的 鍵會產生字符時才會觸發這個時間。即當用戶按的是鍵盤上的數字鍵時不會觸發 這個事件。而上面提到的第一個事件,則是在任何情況下,只要用戶按下了鍵盤 的按鈕,就會觸發的。不過需要注意的是,有時候當用戶按下任意鍵時,也會觸 發這個Keypress事件。這就是這兩個事件的第二個區別。

在這個事件中,主要使用了一個KeyPressEventArgs參數。簡單的說,這個參 數主要用來代表所按鍵的字符代碼。因為字符代碼對於字符鍵和組合鍵的每個組 合都是唯一的,為此這個參數的值也是唯一的。例如同樣是鍵盤上的字符A鍵,在 不同的情況下會產生不同的字符代碼。如在大寫控制鍵打開與關閉的情況下,當 用戶按下這個字符A鍵時,其後台產生的字符代碼是不同的。在編寫代碼的時候, 開發人員不用了解到底用戶是在什麼情況下按下某個按鈕的。只需要知道,不同 的字符代碼代表什麼意思。如字符代碼65就表示用戶同時按下了Shift鍵與A鍵。 此時在代碼中,就需要根據鍵盤當前的狀況來決定後續的行為。如鍵盤當前處於 大寫狀態下,則表示用戶想輸入的信息是小寫字符a。反之,則表示用戶想輸入的 信息為大寫字符A。

最後需要注意的一點是,開發人員在必要的時候,可以取消這個事件。也就是 說,即使用戶按下了鍵盤上的按鈕,也不觸發這個事件。在某些情況下,這個功 能還是蠻有用的。如當某帳單據已經審核,不允許再進行任何的更改。或者說, 只允許用戶通過鼠標來操作,而不允許通過鍵盤來操作。簡單的說,就是需要系 統忽略用戶的鍵盤輸入,此時就需要使用這種方法。其實實現的手段也很簡單, 只需要使用Handled屬性即可。當將這個屬性設置為True時,就會取消 Keypress 事件。

三、KeyUp事件。

以上兩個事件都是用戶按下鍵盤的按鈕時觸發的事件。注意上面這兩個事件並 不是同時觸發的,而是有先後的順序。KeyUp事件顧名思義,就是當用戶放開輸入 的鍵的時候,所觸發的一個事件。在這個事件中,也會需要用到KeyCode屬性、 Modifiers屬性和KeyData屬性。這幾個屬性跟上面談到的幾個屬性類似,筆者就 不過多展開了。

四、接受鍵盤輸入時的注意事項。

當應用程序接受鍵盤輸入時,最重要的一點就是需要對用戶輸入的數據進行合 規性審計。也就是說,並不是用戶輸入什麼,應用程序就接受什麼。當用戶輸入 數據時,需要對其合法性進行檢查。如現在需要用戶通過鍵盤輸入一個身份證號 碼。一般來說身份證號碼都會有最大長度的規定。當用戶輸入的數據超過這個長 度時,系統就需要提醒。如可以發出嘟嘟的警報聲,並忽略用戶後續的輸入。

總結了一下,類似的合規性審計主要有以下幾種。

首先需要檢查的是用戶輸入的數據有沒有超過最大的長度限制。有時候我們可 能會不小心按下了某個鍵,如書本壓在鍵盤上,此時就會輸入一長串字符。為了 安全起見,就需要對輸入的長度進行限制。當超過規定的長度是,需要發出警告 。可以以聲音、對話框等形式來提醒用戶的鍵盤輸入。

其次需要檢查的是用戶輸入的內容。如在某些文本框中,只允許用戶輸入數字 。如郵編、價格等等。在這些文本框中,當用戶輸入了非數字的數據,如大寫字 符A,系統會自動忽略掉,並向用戶發出警報。一些設計的比較成熟的應用軟件, 在數字框內根本輸入進非數字類型的數據。而有一些比較小的應用軟件,則是在 保存的時候進行檢驗。即用戶可以輸入,但是保存不了。筆者認為,事前控制比 事後控制更加的有效。特別是在填寫比較復雜的表單的時候。

第三是一些綜合性的控制。如現在有一個文本框需要用戶輸入產品編碼,其編 碼規則是前面三個位字符,後面五位為數字。為了提高數據的准確性,就需要在 接受用戶輸入的時候對其進行驗證。如當用戶輸入第四位內容的時候,如果用戶 輸入的是字符,則會被忽略掉,並向用戶發出警告。

總之,在接受用戶鍵盤輸入的時候,需要注意兩方面的內容。一是在適當的時 候接受用戶的鍵盤輸入。也就是說需要判斷,在哪些情況下忽略用戶的鍵盤輸入 操作。二是對於用戶輸入的數據,需要進行合規性審計。雖然在數據庫層面也可 以進行檢驗,不過筆者建議,最好還是在用戶輸入的時候就進行判斷。事前控制 的效果要好於事後。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved