VB和VB.NET 文本框的輸入控制

有時候爲了某種需求,要控制用戶的輸入。可以通過控制輸入法狀態 或 輸入按鍵來控制。

以下介紹通過對輸入按鍵控制輸入

 VB6.0 SAMPLE

'只能允許輸入數字和字母

Private Sub Text1_KeyPress(KeyAscii As Integer)
    MsgBox KeyAscii  '查看按下鍵的ASCII碼
    Select Case KeyAscii
        Case 48 To 57  '數字
        Case 65 To 90  '字母大寫
        Case 97 To 122 '字母小寫
        Case 13
            SendKeys "{tab}"
        Case Else
            KeyAscii = 0   '無效按鍵
    End Select
End Sub

 

' VB.NET SAMPLE

'' 按回車鍵相當於Tab 鍵

    Private Sub txtPassword_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPassword.KeyPress
        'MsgBox(e.KeyChar)  '查看按下鍵的字符
        If e.KeyChar = Chr(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{Tab}")
        End If
    End Sub

VB.NET 通過以下步驟來確保用戶輸入數據的正確性:
只能輸入整數:
首先添加好文本框控件TextBox後把屬性
IMEMode的值改成Disable,這樣在該文本框中就不能使用中文輸入法了。然後對文本框的KeyPress事件添加以下代碼

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Textbox1.KeyPress
     If Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8) Then
         e.Handled = False
     Else
         e.Handled = True
     End If
End Sub

其中e.KeyChar是鍵盤輸入的鍵對應的字符,IsDigit函數可以判斷是否爲0到9的數字,Chr(8)爲退格鍵,當e.Handled爲True時,程序認爲該KeyPress事件已經被處理過了,文本框的內容也就不會發生變化了。從以上程序中不難看出,此時文本框只能接受數字和退格鍵,也就是說這個文本框是用來輸入整數的。

輸入爲非負的數值(可輸入小數):

如果文本需要輸入小數的話,就要能夠輸入小數點".",而且小數點只能輸入一次,此時可以將上面的函數改爲下面的格式:

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Textbox1.KeyPress
     If Char.IsDigit(e.KeyChar) or e.KeyChar = Chr(8) or e.KeyChar = "." Then
         If e.KeyChar = "." And InStr(TextBox1.Text, ".") > 0 Then
             e.Handled = True
         Else
             e.Handled = False
         End If
     Else
         e.Handled = True
     End If
End Sub

其中函數InStr返回指定字符在字符串中的位置,當字符串中不含此字符時,返回一個負數。這時文本框可以用來輸入正整數及小數。


輸入爲數值(含小數和負數)

如果文本需要輸入負數的話,就要能夠輸入負號"-",而且只能是文本框輸入的第一個字符,此時又可以將上面的函數改爲下面的格式:


Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Textbox1.KeyPress

        Dim ObjText As TextBox = sender

        If Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8) Then   '整數和退格控制(可輸入)
            e.Handled = False
        Else
            If e.KeyChar = "." AndAlso InStr(ObjText.Text, ".") <= 0 Then    '輸入小數點控制
                e.Handled = False
            ElseIf e.KeyChar = "-" AndAlso InStr(ObjText.Text, "-") <= 0 AndAlso ObjText.SelectionStart = 0 Then    '輸入負號控制(負號只能輸入的最前面)
                e.Handled = False
            Else
                '其他字符全部禁止輸入
                e.Handled = True
            End If
        End If

End Sub



這時文本框可以用來輸入正的或負的整數及小數。

當有多個文本框需要做輸入限制時,可以在以上代碼Handles後面加上多個文本框的KeyPress事件,各事件之間用逗號隔開,例如
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Textbox1.KeyPress,Textbox2.KeyPress,Textbox3.KeyPress
對於要判斷文本框內容的函數,就要把代碼進行修改,使其能夠同時處理多個文本框,也就是把上面後兩段程序中的TextBox1.Text改爲CType(sender, TextBox).Text,這樣一來就能夠對號入座了,比如上面能夠輸入負號的代碼就可以改成:

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Textbox1.KeyPress,Textbox2.KeyPress,Textbox3.KeyPress
        Dim ObjText As TextBox = sender

        If Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8) Then   '整數和退格控制(可輸入)
            e.Handled = False
        Else
            If e.KeyChar = "." AndAlso InStr(ObjText.Text, ".") <= 0 Then    '輸入小數點控制
                e.Handled = False
            ElseIf e.KeyChar = "-" AndAlso InStr(ObjText.Text, "-") <= 0 AndAlso ObjText.SelectionStart = 0 Then    '輸入負號控制
                e.Handled = False
            Else
                '其他字符全部禁止輸入
                e.Handled = True
            End If
        End If
End Sub



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章