C#中只接受數字輸入的控件

 1---------------------------------------------------------

使用NumericUpDown控件。   當需要獲取簡單數字輸入時,在.NET世界中最直接的方法不是去想辦法與TextBox搏鬥,而應該換個控件來用——NumericUpDown。這個控件不但能接受來自鍵盤的數字輸入,還有一組上下箭頭來步進。它包含了許多可以設置的屬性,例如顯示分隔符逗號的bool ThousandsSeparator、控制最小/最大值的decimal Minimum/decimal Maximum屬性等。

  下面對這幾種解決方法的其中一些稍微討論一下。

  一、繼承TextBox並覆蓋其CreateParams屬性

  使用這種方法的NumericTextBox的實現(代碼的第1-12行)及用例:

  C#代碼   

 

運行程序,在輸入任意非0-9的字符時的樣子:

C#中只接受數字輸入的控件

  (截圖反映的是在我的簡體中文Windows XP上的運行效果;若系統語言不是簡體中文的話會根據系統語言而不同)

  如果這個文本框已經能滿足需求,就沒必要自己監聽KeyDown事件那麼麻煩了。

 

2----------------------------------------------------------------------------------------

 

二、自行監聽KeyDown事件

  可以參考CodeProject上Numeric TextBox : Allow your users to enter numeric data the easy way的實現方式。基本原理就是在KeyDown的響應方法中對e.KeyCode進行判斷,如果輸入不滿足條件則設置某個標識,然後再KeyPress的響應方法裏設置e.Handled = true;來取消該次事件。

  最簡單來說類似這樣:

  C#代碼   

 

(判斷邏輯來自KeyEventArgs在MSDN文檔上的範例代碼)

  得到的文本框外觀與一般的TextBox沒區別,只是無法由鍵盤輸入數字字符以外的字符。要避免任意字符串被複制-粘貼進來的話,要另外做些判斷。這裏就不詳細寫了。

 

3----------------------------------------------------------------------------

 

三、使用MaskedTextBox

 

 使用例子:

  C#代碼  

 

這段代碼是手寫的;要是用VS2005/VS2008的設計器的話,這個例子的所有功能都能直接在設計器裏指定。

  輸入內容(可以看到分隔符都不需要自己寫了,已經寫好在輸入框裏;只要填空就行):

C#中只接受數字輸入的控件

  輸入內容不符合Mask屬性指定的模式時:

C#中只接受數字輸入的控件 

 

4------------------------------------------------------------

 

四、使用NumericUpDown

  C#代碼  

 

這段代碼是手寫的;要是用VS2005/VS2008的設計器的話,這個例子的所有功能都能直接在設計器裏指定。

  NumericUpDown的內容的值可以用Value屬性來設置或獲取,類型爲decimal。

  截圖:(輸入不符合要求的字符時,默認行爲是beep一下,沒有工具條的提示)

C#中只接受數字輸入的控件 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章