[C#][VB.NET]限制TextBox 只能輸入數字,以及限制不能使用快速鍵

  • 127362
  • 0
  • 2010-08-02

[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