C# WPF下限制TextBox只輸入數字、小數點、刪除等鍵
阿新 • • 發佈:2019-02-09
C#中限制TextBox只輸入數字和小數點的方法不止一種,有正則表達、ASCII碼,還有通過Key和ModifierKeys的。這裡講講通過Key和ModifierKeys來進行輸入限制。Key是C#下的列舉型別,枚舉了所有的鍵盤鍵,如D0到D9為0到9的按鍵,Key.Delete代表的是刪除鍵,Key.OemPeriod為小數點。ModifierKeys也是C#下的列舉型別,包括Alt、Ctrl、Shift等鍵。如下:
TextBox通過PreviewKeyDown和KeyDown捕獲按下的鍵值,TextChanged獲取已經發生變化的TextBox的值和對應的Changed。另外需要通過:InputMethod.IsInputMethodEnabled="False",遮蔽輸入法。程式碼如下:public enum ModifierKeys{ None=0, //沒有按下任何修飾符 Alt=1, //Alt鍵 Control=2, //Ctrl鍵 Shift=4, //Shift鍵 Windows=8, //Windows徽標鍵 Apple=8, //按下Apple鍵徽標鍵 }
PreviewKeyDown事件處理:public static bool isInputNumber(KeyEventArgs e) { if ((e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || e.Key==Key.Delete || e.Key == Key.Back || e.Key == Key.Left || e.Key == Key.Right || e.Key == Key.OemPeriod) { //按下了Alt、ctrl、shift等修飾鍵 if (e.KeyboardDevice.Modifiers != ModifierKeys.None) { e.Handled = true; } else { return true; } } else//按下了字元等其它功能鍵 { e.Handled = true; } return false; }
private void textBoxBuyPercent_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (!CommonFun.isInputNumber(e))
{
MessageBox.Show("請輸入數字!");
}
}
遮蔽輸入法:<TextBox Name="textBoxBuyPrice" Grid.Row="3" Grid.Column="2" Text="{Binding BuyPrice}" HorizontalAlignment="Left" Height="23" VerticalAlignment="Center" TextChanged="textBoxBuyPrice_TextChanged" PreviewKeyDown="textBoxBuyPrice_PreviewKeyDown" InputMethod.IsInputMethodEnabled="False" Width=" 80"/>