在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直接 蹦 出来。