当前位置:首页 > IT教程

vb.net 教程 3-4 窗体编程 公共控件4 MaskedTextBox

时间:2020-06-02 07:30:00来源:金橙教程网 作者:admin8 阅读:64次 [手机版]
 

maskedtextbox

9、MaskedtextBox

掩码文本框?实际上就是使用设定的格式来控制文本输入的文本框。

重要属性:

PromptChar:表示在掩码文本框中需要用户填充的位置使用什么字符

Mask:设置用户输入时候的格式,使用该属性时,vs提供了部分默认的格式:

当然我们也可以设置自己的格式,必须是一个或多个掩码元素组成的字符串(摘自MSDN):

0 数字,必选。 此元素将接受 0 到 9 之间的任何一个数字。

9 数字或空间,可选。

# 数字或空间,可选。 如果掩码中该位置为空白,在 Text 属性中将把它呈现为一个空格。 允许使用加号 (+) 和减号 (-)。

L 字母,必选。 限制对 ASCII 字母 a-z 和 A-Z 的输入。 此掩码元素相当于正则表达式中的 [a-zA-Z]。

? 字母,可选。 限制对 ASCII 字母 a-z 和 A-Z 的输入。 此掩码元素是否相当于 [a-zA-Z]? 在正则表达式中。

& 字符,必选。 如果 AsciiOnly 属性设置为 true,此元素的行为将与“L”元素类似。

C 字符,可选。 任何非控制字符。 如果将 AsciiOnly 属性设置为 true,此元素的行为将类似于“?”元素。

A 字母数字,必填。 如果将 AsciiOnly 属性设置为 true,则它接受的唯一字符是 ASCII 字母 a-z 和 A-Z。 此掩码元素的行为类似于 "a" 元素。

a 字母数字,可选。 如果将 AsciiOnly 属性设置为 true,则它接受的唯一字符是 ASCII 字母 a-z 和 A-Z。 此掩码元素的行为类似于 "A" 元素。

比如要求输入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

再来是,鼠标点击了ip设置中的某一段,那么全部选中这一段:

    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, 1, 2, 3
                MaskedTextBox1.SelectionStart = 0
                MaskedTextBox1.SelectionLength = 3
            Case 4, 5, 6, 7
                MaskedTextBox1.SelectionStart = 4
                MaskedTextBox1.SelectionLength = 3
            Case 8, 9, 10, 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, 1, 2, 3
                    MaskedTextBox1.SelectionStart = 4
                Case 5, 6, 7
                    MaskedTextBox1.SelectionStart = 8
                Case 9, 10, 11
                    MaskedTextBox1.SelectionStart = 12
                Case Else
                    '不处理
            End Select
        Else
            If len = 3 Then
                MaskedTextBox1.SelectedText = ""
            End If
        End If

    End Sub

这下总算像模像样了:

当按下button1时,提示输入的ip:

    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 教程 目录

相关阅读

Excel VBA 之 UBound

1.简介 UBound 为 Visual Basic 中的一个函数,用来返回数组或元素相应维度的最大值。同理,LBound函数是获取最小值 2.用法 UBound(

KMPLAYER无法播放rmvb格式的解决办法

内容摘要:电脑上一直有几个媒体播放器,因为暴风影音的广告多,一直没有用。而KMPLAYER速度和兼容性都不错,是我所用的主力播放器。

VB6.0把普通窗体怎么改成MDI窗体?

VB中乐意把普通窗体改成MDI窗体。,该怎么实现呢?下面我们就来看看详细的教程。1、首先,我们在工程资源管理窗口中,右击。2、然后我们

Excel语言基础VBA宏的概念是什么

在Excel的语言基础里,VBA宏的概念是非常需要了解的,宏的录制、编辑、查看等功能,对VBA操作非常重要。以下是金橙教程网小编为您带来

rmvb 文件格式解析

转载自:https://blog.csdn.net/kemengli/article/details/48395113RM/RMVB 文件格式-总结 RM文件格式是标准的标记符文件格式,RM文

分享到:

IT相关

程序相关

推荐文章

热门文章