在VB.NET中,MaskedTextBox對於一些格式化的輸入非常有用,但是初次接觸到它,有時候讓人無所適從,比如這個控件用於IP地址輸入時,就會出現讓人頭痛的問題。
比如,在MaskedTextBox中定義IP地址的格式爲“000.000.000.000”後,滿以爲可以輕鬆搞定IP地址的輸入實際上卻不是那麼回事,這裏輸入字符串"192.168.0.103"到控件中顯示會是什麼樣呢?
“192.168.010.3__” !!
傻眼了吧。怎麼回事呢?當用“0”作爲掩碼的時候表示這個位置必須不可少,除非程序沒有填入。
好了,問題如何解決,如果用其他控件,感覺很麻煩,既然東西有了,如何把它用好也許更容易接受。
這裏寫出如下程序用於將輸入文本和數值進行處理:
Private Function getIPAddressMasked(ByRef vip() As Integer, ByVal strIP_in As String) As String
Dim n As Integer
Dim s As String
Dim st As String
st = strIP_in
st = Replace(st, " ", "")
n = InStr(st, ".")
s = Mid(st, 1, n - 1)
vip(0) = Val(s)
st = Mid(st, n + 1)
n = InStr(st, ".")
s = Mid(st, 1, n - 1)
vip(1) = Val(s)
st = Mid(st, n + 1)
n = InStr(st, ".")
s = Mid(st, 1, n - 1)
vip(2) = Val(s)
st = Mid(st, n + 1)
vip(3) = Val(st)
st = ""
s = Trim(Str(vip(0)))
If Len(s) = 2 Then s = " " + s
If Len(s) = 1 Then s = " " + s
st = st + s + "."
s = Trim(Str(vip(1)))
If Len(s) = 2 Then s = " " + s
If Len(s) = 1 Then s = " " + s
st = st + s + "."
s = Trim(Str(vip(2)))
If Len(s) = 2 Then s = " " + s
If Len(s) = 1 Then s = " " + s
st = st + s + "."
s = Trim(Str(vip(3)))
If Len(s) = 2 Then s = " " + s
If Len(s) = 1 Then s = " " + s
st = st + s
Return st
End Function
Private Sub cmdLink_Click(sender As Object, e As EventArgs) Handles cmdLink.Click
Dim st As String
Dim s As String
Dim vip(4) As Integer
Dim i As Integer
st = mtbIP.Text
s = getIPAddressMasked(vip, st)
mtbIP.Text = s
st = ""
For i = 0 To 3
s = Trim(Str(vip(i)))
If (i <> 3) Then
s = s + "."
End If
st = st + s
Next
MsgBox(st)
End Sub
注意:MaskedTextBox的控件名字爲mtbIP,系統從控件中獲取到字符串後,將字符串送到getIPAddressMasked函數進行處理,處理後通過vip返回每個域的數值,通過函數返回用於MaskedTextBox能正常顯示的字符串,如果需要進一步用於其他處理,可以很簡單地轉換爲大家“喜聞樂見”的IP字符串標準格式,這裏用MsgBox直接 蹦 出來。