WPF 限制Textbox輸入的內容


限制文本框TextBox的輸入內容,在很多場景都有應用。舉個例子,現在文本框中,只能輸入0、1、2、3、4、5、6、7、8、9、“|”這11個字符。

限制輸入0-9很容易實現,關鍵是這個“|”符號。它在WPF中對應的是Key.OemPipe鍵。如果直接允許該鍵輸入,那么會有“\”這個符號也可以輸入。那么問題來了,怎么才能限制呢?很簡單:先確認shift鍵是否已經按下。

關鍵代碼如下:

1 bool shiftKey = (Keyboard.Modifiers & ModifierKeys.Shift) != 0;

這樣,當我們確認已經按下了shift鍵時,才允許Key.OemPiple鍵按下,就可以確保只能輸入“|”符號了。

一個完整的示例代碼如下:

 1 private void textbox_keydown_event(object sender, KeyEventArgs)
 2 {
 3             bool shiftKey = (Keyboard.Modifiers & ModifierKeys.Shift) != 0;
 4             if (shiftKey == true)
 5             {
 6                 if (e.Key != Key.OemPipe)
 7                 {
 8                     e.Handled = true;
 9                 }
10             }
11             else if (e.Key != Key.Delete && e.Key != Key.Back &&
12                      e.Key != Key.D0 && e.Key != Key.D1 &&
13                      e.Key != Key.D2 && e.Key != Key.D3 &&
14                      e.Key != Key.D4 && e.Key != Key.D5 &&
15                      e.Key != Key.D6 && e.Key != Key.D7 &&
16                      e.Key != Key.D8 && e.Key != Key.D9 &&
17                      e.Key != Key.NumPad0 && e.Key != Key.NumPad1 &&
18                      e.Key != Key.NumPad2 && e.Key != Key.NumPad3 &&
19                      e.Key != Key.NumPad4 && e.Key != Key.NumPad5 &&
20                      e.Key != Key.NumPad6 && e.Key != Key.NumPad7 &&
21                      e.Key != Key.NumPad8 && e.Key != Key.NumPad9)
22             {
23                 e.Handled = true;
24             }
25 }

 

更新:

又出了新的需求!!!!!

要過濾空格輸入。測試了一下,發現空格鍵space、上下左右、PageUp、PageDown幾個鍵是KeyDown事件無法捕獲的——也許可以捕獲,反正我沒有捕獲到。測試還發現KeyUp和PreviewKeyDown事件都可以捕獲。但是,問題是,使用KeyUp事件時,即是捕獲到了,這個空格已經輸入了,如果再刪除,也會造成不好的體驗。所以只有使用PreviewKeyDown事件了。基本方式如上面。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM