【實例說明】
可以在TextBox控件中輕松地輸入文本信息,輸入的文本信息可以包括字母、數字、漢字等。
如果需要用戶在TextBox控件中填寫年齡信息,那么年齡信息應當只允許數字,怎么限制用戶輸入其他信息呢?
本實例中將會演如何只允許用戶在TextBox控件中輸入數字,當按下其他非數字按鈕時便會提示:
這個例子很簡單的,限制輸入,直接在KeyPress事件里驗證就行了。下面說了兩種方式:
【關鍵技術】
本實例重點在於向讀者介紹怎樣通過Char結構的isDigit方法判斷用戶在TextBox控件中輸入的字符是否為數字,以及使用按鍵對應的Ascii值判斷是否是指定范圍的按鍵等等。下面對本實例用到的關鍵技術進行詳細的講解。
TextBox控件的KeyPress事件包含兩個參數,即sender事件源和包含事件數據的e,
通過e的KeyChar屬性可以獲取用戶按下鍵盤的按鍵,通過e的Handler屬性可以設置是否處理過用戶按鍵的事件。
通過e.KeyChar轉成int的值可以獲取到當前用戶按下鍵盤的按鍵對應的ASCII值。
(1)KeyChar屬性
該屬性用於獲取或設置按下鍵對應的字符,語法格式如下:
1 public char KeyChar{ get; set; }
參數說明
屬性值:Char結構,餓到按下鍵對應的字符。
(2)Handled屬性
該屬性用來獲取或設置一個值,該值只是是否處理過System.Windows.Forms.Control.KeyPress事件,語法格式如下:
1 public bool Handled{ get; set; }
參數說明
屬性值:布爾類型,只是是否處理過KeyPress事件。
使用Char結構的isDigit方法可以判斷指定字符是否為十進制數字,下面對其進行詳細說明。
(3)isDigit方法
該方法只是某個字符是否屬於十進制數字類別,語法格式如下:
1 public static bool IsDigit(char c)
參數說明
c:一個字符
返回值:返回布爾值,如果字符c是是兼職數字則為true,否則為false。
說明:通過KeyPressEventArgs的Handled設置為true,可以取消KeyPress事件,這樣可以取消用戶在TextBox按鍵的值。
【設計過程】
(1)打開Visual Studio,新建WinForm應用程序,命名為OnlyDigit。
(2)更改默認窗體Form1的Name屬性為FrmMain,向窗體中添加一個TextBox文本框控件,用於演示只允許向文本框中輸入數字。
(3)程序的主要代碼如下:
1 // 在當前輸入框中按下並彈起按鍵的事件 2 private void txt_Input_KeyPress(object sender, KeyPressEventArgs e) 3 { 4 if (!char.IsDigit(e.KeyChar)) // 如果當前輸入的不是數字 5 { 6 MessageBox.Show("請輸入數字!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information); // 給出錯誤提示 7 e.Handled = true; // 取消當前操作,即取消在控件中現實該字符的操作 8 } 9 }
上面這段代碼表示,使用char的IsDigit方法判斷傳進來的char字符是不是一個十進制的數字、
當你運行這段代碼會發現:我們按下非數字的字母或符號的時候,確實實現了這個效果、
但是、當你按下回車、退格、Ctrl等等這些按鍵的時候、同樣認為是非數字被攔截了、
所以、這時就需要使用ASCII值判斷數字范圍了,因此,另一種寫法:
1 // 在當前輸入框中按下並彈起按鍵的事件 2 private void txt_Input_KeyPress(object sender, KeyPressEventArgs e) 3 { 4 int keyAsciiValue = Convert.ToInt32(e.KeyChar); // 獲取當前按下的按鍵對應的ASCII值 5 6 // 如果當前ASCII值范圍不在48-57之間、也就是0-9對應的ASCII值之間 7 // 或者ASCII的值不是8[退格鍵]或13[回車鍵]時 8 if (!(((keyAsciiValue >= 48 && keyAsciiValue <= 57) || (keyAsciiValue == 8 || keyAsciiValue == 13)))) 9 { //如果上面的驗證結果是false 10 MessageBox.Show("請輸入數字!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information); // 給出錯誤提示 11 e.Handled = true; 12 } 13 14 //if (!char.IsDigit(e.KeyChar)) // 如果當前輸入的不是數字 15 //{ 16 // MessageBox.Show("請輸入數字!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information); // 給出錯誤提示 17 // e.Handled = true; // 取消當前操作,即取消在控件中現實該字符的操作 18 //} 19 }
我這里不能插附件,要源碼的話留言吧,呵呵。
【來自:[LonelyShadow 博客] http://www.cnblogs.com/LonelyShadow】