1. 程式人生 > >C# WPF下限制TextBox只輸入數字、小數點、刪除等鍵

C# WPF下限制TextBox只輸入數字、小數點、刪除等鍵

C#中限制TextBox只輸入數字和小數點的方法不止一種,有正則表達、ASCII碼,還有通過Key和ModifierKeys的。這裡講講通過Key和ModifierKeys來進行輸入限制。Key是C#下的列舉型別,枚舉了所有的鍵盤鍵,如D0到D9為0到9的按鍵,Key.Delete代表的是刪除鍵,Key.OemPeriod為小數點。ModifierKeys也是C#下的列舉型別,包括Alt、Ctrl、Shift等鍵。如下:
public enum ModifierKeys{
   None=0,        //沒有按下任何修飾符
   Alt=1,             //Alt鍵
   Control=2,     //Ctrl鍵
   Shift=4,         //Shift鍵
   Windows=8,   //Windows徽標鍵
   Apple=8,       //按下Apple鍵徽標鍵
    }
TextBox通過PreviewKeyDown和KeyDown捕獲按下的鍵值,TextChanged獲取已經發生變化的TextBox的值和對應的Changed。另外需要通過:InputMethod.IsInputMethodEnabled="False",遮蔽輸入法。程式碼如下:
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;
        }
PreviewKeyDown事件處理:
 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"/>