有時候爲了某種需求,要控制用戶的輸入。可以通過控制輸入法狀態 或 輸入按鍵來控制。
以下介紹通過對輸入按鍵控制輸入
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