WPF TextBox只能輸入數字

2022-02-02 18:50:41 字數 1733 閱讀 9851

關於wpf textbox只能輸入數字並不是乙個很難的功能,網上許多的實現方式都是通過將string型別轉換為int32型別來進行判斷的,自從對了clr via c#這本書以後就對拆裝箱操作產生了恐懼,於是就想如果不(或者是減少)通過型別轉換的方式去實現會不會更好。

先做個測試,測試一下textbox幾個關鍵關鍵事件的觸發順序:

在上面的實踐中,在previewkeydownkeydown中都可以捕獲到按下的鍵值,在previewtextinput中可以獲取到當前輸入的字元,在textchanged裡面可以獲取到已經發生變化的textbox的值和對應的changed(e.changes),接下來就是對應的keyup事件,在測試的時候還有乙個textinput的事件沒有觸發,不知道怎麼回事,不過從字面上理解這個事件貌似也沒有什麼用處,textinput事件不知道處於乙個什麼樣的狀態。

通過上面的測試發現可以在previewkeydown對使用者按下的鍵值進行判斷,**如下:       

1

protected

override

void

onpreviewkeydown(keyeventargs e)212

}13else

1417 }

通過**可以看出在輸入時只允許按下的鍵值為數字和backspace,並且不能是組合鍵。這樣就實現了不通過型別轉換實現了只能輸入數字的功能,在這裡多說一點,一般這個功能還需要考慮到貼上的問題,例如將一段內容從其他地方貼上到文字框內,這個可以通過dataobject的附加事件pasting來實現,**如下:

1

public

numerictextbox()25

6private

void text_pasting(object

sender, dataobjectpastingeventargs e)

7

「意外」的是由於在previewkeydown中 對組合鍵進行了判斷,所以就不需要這個pasting事件了。

在很多業務需求中需要這個textbox有個最大值和最小值,我個人的做法是在textchanged事件中進行判斷,這個就沒有辦法避免型別轉換了,**如下:

1

protected

override

void

ontextchanged(textchangedeventargs e)

28 _isreentry = true

;9 int32 temp = 0;10

if (int32.tryparse(text, out

temp))

1117 text =temp.tostring();18}

19//

型別不正確或者超長會導致轉換失敗

20else

2124 _isreentry = false

;25 }

兩個區域性變數為:

1

private int32 _index; //

游標位置

2private

bool _isreentry; //

標識textchanged事件是否重入

如果有什麼更好的想法,歡迎指教。

input輸入框只能輸入數字,只能輸入字母數字組合

輸入大小寫字母 數字 下劃線 1 g,輸入小寫字母 數字 下劃線 2 g,輸入數字和點 3 g,輸入中文 4 g,輸入數字 輸入英文 5 g,輸入中文 數字 英文 6 g,輸入數字和字母 除了英文的標點符號以外,其他的都可以中文,英文本母,數字,中文標點 7 g,只能輸入數字 小數點也不能輸入 只能...

輸入框只能輸入數字

正規表示式限制輸入框只能輸入數字 如下 其中,onafterpaste防止使用者從其它地方copy內容貼上到輸入框 輸入框只能輸入字母和下橫線的正規表示式 輸入框只能輸入字母數字和下橫線的正規表示式 或 as3 文字過濾 過濾文字輸入 textfield.restrict 此處為可輸入的內容 fie...

輸入框中只能輸入數字

syetem.windows.froms 為 keydown keyup 的事件提供資料的類是 keyeventargs 而為 keypress 事件提供資料的類是 keypresseventargs keypress主要用來捕獲數字 注意 包括shift 數字的符號 字母 注意 包括大小寫 小鍵盤...