C# Textbox 輸入限制數字及一個小數點@Sunny的工程師日記

在開發程式的時候,常常會有某些情況是限制輸入的內容,例如我現在要一組浮點數的內容,但是操作者往往不會依照著程式設計師的想法走,或許他會多加一個小數點,或許會加入奇怪的標點符號,這就會照成程式的轉換型別時出現問題,所以要避免這種狀況,就必須要讓使用者輸入內容時作出限制。

範例:
  1. 輸入一個小數點。
  2. 數字範圍0~9。
  3. 不能夠出現奇怪的標點符號

解決方式:
  1. 要如何判斷0~9的數字區間呢?最快的做法就是判斷使用者所輸入的鍵盤對應的數字是否落在0~9之間,到這邊還不要太開心,因為電腦判斷0~9的阿拉伯數字是必須經過換算才會得到這個結果,所以這邊必須去對照ASCII Code。阿拉伯數字0~9分別對應ASCII Code DEC 48~57。
  2. 此時Textbox就可以有效的判斷輸入的內容是否為阿拉伯數字0~9區間,但為了輸入方便,必須將Enter 及delete按鍵也加入到判斷,這樣子輸入上會變得非常方便。

以下是程式碼的,可以自行參考。

        //限制輸入的內容必須為數字
private void tb_KeyPress_limite_KeyPress(object sender, KeyPressEventArgs e)
{
    //限定輸入的內容僅能有一個小數點
    if (e.KeyChar == '.')
    {
        foreach (char i in (sender as TextBox).Text)//判定textBox1是否有小數點
        {
            if (i == '.')
                e.Handled = true;//有
        }
        return;
    }
    // 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;
    }
}


參考資料:

  1. ASCII https://zh.wikipedia.org/wiki/ASCII

留言

  1. 想問您,我在使用textbox的時候實在找不到KeyPress的觸發條件,請問您知道為什麼嗎?

    回覆刪除

張貼留言

這個網誌中的熱門文章

系統工程師神器!如何讓Python在Linux上執行ssh(三)pyinstaller環境建置@Sunny的工程師日記

C# M2MQTT 斷線重連@Sunny的工程師日記