[C#][VB.NET]限制TextBox 只能輸入數字,以及限制不能使用快速鍵
一、問題描述
如何限制 TextBox 只能輸入數字,並且不能使用快速鍵,以及滑鼠右鍵。
二、方法
限制 TextBox 只能輸入數字的部份,可以在 TextBox_KeyPress 事件中,藉由判斷 e.KeyChar 來處理。
限制 TextBox 上不使用快速鍵與滑鼠右鍵表單,可使用 TextBox.ShortcutsEnabled 屬性 : 取得或設定值,指出是否啟用定義的快速鍵。
*註 : 別忘記還有正則表達式可以用喔
C# 程式碼
private void Form1_Load(object sender, EventArgs e)
{
textBox1.ShortcutsEnabled = false; // 不啟用快速鍵
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// e.KeyChar == (Char)48 ~ 57 -----> 0~9
// e.KeyChar == (Char)8 -----------> Backpace
// e.KeyChar == (Char)13-----------> Enter
if (e.KeyChar == (Char)48 || e.KeyChar == (Char)49 ||
e.KeyChar == (Char)50 || e.KeyChar == (Char)51 ||
e.KeyChar == (Char)52 || e.KeyChar == (Char)53 ||
e.KeyChar == (Char)54 || e.KeyChar == (Char)55 ||
e.KeyChar == (Char)56 || e.KeyChar == (Char)57 ||
e.KeyChar == (Char)13 || e.KeyChar == (Char)8)
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
VB.NET 程式碼
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.ShortcutsEnabled = False '不啟用快速鍵
End Sub
Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
'e.KeyChar == (Char)48 ~ 57 -----> 0~9
'e.KeyChar == (Char)8 -----------> Backpace
'e.KeyChar == (Char)13-----------> Enter
If e.KeyChar = Chr(48) Or e.KeyChar = Chr(49) Or e.KeyChar = Chr(50) Or e.KeyChar = Chr(51) Or e.KeyChar = Chr(52) Or e.KeyChar = Chr(53) Or e.KeyChar = Chr(54) Or e.KeyChar = Chr(55) Or e.KeyChar = Chr(56) Or e.KeyChar = Chr(57) Or e.KeyChar = Chr(13) Or e.KeyChar = Chr(8) Then
e.Handled = False
Else
e.Handled = True
End If
*註 : 程式碼故意把所有 KeyChar 都列出來,想使用的人可自行縮減
2010/6/24 補充精簡寫法
我們可以透過以下方法來判斷輸入字元
Char.IsDigit 方法 : 指示指定的 Unicode 字元是否分類為十進位數字。
Char.IsControl 方法 : 指示指定的 Unicode 字元是否分類為控制字元。
C# 程式碼
private void Form1_Load(object sender, EventArgs e)
{
textBox1.ShortcutsEnabled = false; // 不啟用快速鍵
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// 使用 Char.IsDigit 方法 : 指示指定的 Unicode 字元是否分類為十進位數字。
// e.KeyChar == (Char)48 ~ 57 -----> 0~9
// Char.IsControl 方法 : 指示指定的 Unicode 字元是否分類為控制字元。
// e.KeyChar == (Char)8 -----------> Backpace
// e.KeyChar == (Char)13-----------> Enter
if (Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar))
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
VB.NET 程式碼
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.ShortcutsEnabled = False '不啟用快速鍵
End Sub
Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
'使用 Char.IsDigit 方法 : 指示指定的 Unicode 字元是否分類為十進位數字。
'e.KeyChar == (Char)48 ~ 57 -----> 0~9
'Char.IsControl 方法 : 指示指定的 Unicode 字元是否分類為控制字元。
'e.KeyChar == (Char)8 -----------> Backpace
'e.KeyChar == (Char)13-----------> Enter
If Char.IsDigit(e.KeyChar) Or Char.IsControl(e.KeyChar) Then
e.Handled = False
Else
e.Handled = True
End If
End Sub