天天看點

VB.NET使文本框隻能輸入數字    KeyPress小數點負數批量處理

    編制計算類程式時文本框一般都用于輸入數字資料,此時可以通過以下步驟來確定使用者輸入資料的正确性:首先添加好文本框控件TextBox後把屬性IMEMode的值改成Disable,這樣在該文本框中就不能使用中文輸入法了。然後對 

    KeyPress

    文本框的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
	If Char.IsDigit(e.KeyChar) Or e.KeyChar = "." Or e.KeyChar = Chr(8) Then
		If e.KeyChar = "." And InStr(TextBox1.Text, ".") > 0 Then
			e.Handled = True
		Else
		e.Handled = False
		End If
	ElseIf 
		e.KeyChar = "-" And TextBox1.Text = "" Then
		e.Handled = False
	Else
		e.Handled = True
	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
	If Char.IsDigit(e.KeyChar) Or e.KeyChar = "." Or e.KeyChar = Chr(8) Then
			If e.KeyChar = "." And InStr(CType(sender, TextBox).Text, ".") > 0 Then
				e.Handled = True
			Else
				e.Handled = False
			End If
	ElseIf e.KeyChar = "-" And CType(sender, TextBox).Text = "" Then
			e.Handled = False
	Else
		e.Handled = True
	End If
End Sub
           

繼續閱讀