vb.net 教程 3-4 窗体编程 公共控件4 MaskedTextBox
9、MaskedTextBox 掩码文本框?实际上就是使用设定的格式来控制文本输入的文本框。 重要属性: PromptChar:表示在掩码文本框中需要用户填充的位置使用什么字符 Mask:设置用户输入时候的格式,使用该属性时,vs提供了部分默认的格式: 当然我们也可以设置自己的格式,必须是一个或多个掩码元素组成的字符串(摘自MSDN): 0 数字,必选。 此元素将接受 0 到 9 之间的任何一个数字。 比如要求输入4位数字,那么就可以用“0000”表示。
重要事件: MaskInputRejected:用户输入的内容不符合要求
以下例子,只允许输入4位数字: 在MaskedTextBox2的属性Mask中输入“0000”,PromptChar 换为空格。 当运行时可以看到已经有4个空格占位符,可以在里面输入。但是除了数字之外其他不能输入进去。 如果在MaskInputRejected事件中加入代码: Private Sub MaskedTextBox2_MaskInputRejected(sender As Object,e As MaskInputRejectedEventArgs) Handles MaskedTextBox2.MaskInputRejected Label4.Text = "错误的输入" End Sub 运行后,输入错误的内容,比如按下字母键,那么label4就会显示设置的内容:
前段时间,我想使用MaskedTextbox来做一个类似于IP地址输入的文本框,作了如下尝试: 设置属性Mask为"900.900.900.900",PromptChar为” “ (空格)。 以上措施限制了用户输入为数字。 如何实现按下"."就自动跳到下一段呢? 我考虑了个办法,就是设置按下"."的时候,就设置光标到指定位置,结果发现有时候没用,因为win10下有时候是直接开的中文,实际按下的是"。"。 那么找到问题所在,就一点点解决,就设置为按下"."或者“。”设置光标到指定位置: Private Sub MaskedTextBox1_KeyPress(sender As Object,e As KeyPressEventArgs) Handles MaskedTextBox1.KeyPress Dim pos As Integer = 0 pos = MaskedTextBox1.SelectionStart If (e.KeyChar = "."c) Or (e.KeyChar = "。"c) Then Select Case pos Case 0,1,2,3 MaskedTextBox1.SelectionStart = 4 Case 5,6,7 MaskedTextBox1.SelectionStart = 8 Case 9,10,11 MaskedTextBox1.SelectionStart = 12 Case Else '不处理 End Select End If End Sub 当在ip设置的第一段按下“。”或".",那么光标就到了第2段,依次类推。当然如果光标本身在最后一段那就不用改变。 然后是如果输入的数字大于255,那么提示错误: Private Function checkIt(ByVal strIp As String) As String Dim ipsplit(3) As String ipsplit = strIp.Split(".") For i As Integer = 0 To 3 If ipsplit(i).Trim(" ") = "" Then Continue For End If If IsNumeric(ipsplit(i)) = False Then Return "输入了错误的ip" End If If Integer.Parse(ipsplit(i)) < 1 Or Integer.Parse(ipsplit(i)) > 255 Then Return "IP应在 1-255之间" End If Next Return "" End Function Private Sub MaskedTextBox1_KeyUp(sender As Object,e As KeyEventArgs) Handles MaskedTextBox1.KeyUp Dim message As String = checkIt(MaskedTextBox1.Text) If message <> "" Then MessageBox.Show(message) End If End Sub
Private Sub MaskedTextBox1_MouseClick(sender As Object,e As MouseEventArgs) Handles MaskedTextBox1.MouseClick Dim pos As Integer = 0 pos = MaskedTextBox1.SelectionStart Select Case pos Case 0,3 MaskedTextBox1.SelectionStart = 0 MaskedTextBox1.SelectionLength = 3 Case 4,5,7 MaskedTextBox1.SelectionStart = 4 MaskedTextBox1.SelectionLength = 3 Case 8,9,11 MaskedTextBox1.SelectionStart = 8 MaskedTextBox1.SelectionLength = 3 Case Else MaskedTextBox1.SelectionStart = 12 MaskedTextBox1.SelectionLength = 3 End Select End Sub
于是,又修改了代码,如果发现有数字被选中且是3个,那么就删除这3个数字: Private Sub MaskedTextBox1_KeyPress(sender As Object,e As KeyPressEventArgs) Handles MaskedTextBox1.KeyPress Dim pos As Integer = 0 pos = MaskedTextBox1.SelectionStart Dim len As Integer len = MaskedTextBox1.SelectionLength If (e.KeyChar = "."c) Or (e.KeyChar = "。"c) Then Select Case pos Case 0,11 MaskedTextBox1.SelectionStart = 12 Case Else '不处理 End Select Else If len = 3 Then MaskedTextBox1.SelectedText = "" End If End If End Sub 这下总算像模像样了:
Private Sub Button11_Click(sender As Object,e As EventArgs) Handles Button11.Click MessageBox.Show(MaskedTextBox1.Text.Replace(" ","")) End Sub 不过以上代码还有些明显的bug,大家尝试一下能不能自己搞定。
最后其实我想说的是,我使用这个控件的时候比较少,就上面所说的输入IP这个例子,还不如使用TextBox控件,然后提交的时候自己再做个检查方便。
学习更多vb.net知识,请参看 vb.net 教程 目录 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |