You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让VB.NET的MaskedTextBox提示字符显示为MM:SS?

解决MaskedTextBox显示MM:SS提示的问题

你遇到的核心问题是:MaskedTextBox的PromptChar属性只能接受单个字符,你设置成"MM,SS"这种字符串时,控件只会取第一个字符(也就是'M')来填充所有占位位置,所以才会显示MM:MM。要实现不同位置显示不同的提示文本(MM:SS),需要通过自定义绘制的方式来实现。

解决方案:通过Paint事件手动绘制提示文本

我们可以保留Mask = "00:00"的设置,然后处理控件的Paint事件,在对应的位置手动绘制"MM"和"SS",覆盖默认的PromptChar显示。

以下是修改后的完整代码示例:

Mtxt = New MaskedTextBox
Mtxt.Name = "txtRTime" & IND
Mtxt.Font = New Font("arial", 8, FontStyle.Regular)
Mtxt.Visible = True
Mtxt.Height = 30
Mtxt.Width = 110
Mtxt.MaxLength = 4
Mtxt.Mask = "00:00"
' 将PromptChar设为一个不显眼的占位符(比如空格),后续会被我们绘制的文本覆盖
Mtxt.PromptChar = " "
Mtxt.Top = 90
Mtxt.Left = 130
Mtxt.ShortcutsEnabled = False

' 添加Paint事件处理程序
AddHandler Mtxt.Paint, AddressOf MaskedTextBox_Paint

然后添加对应的Paint事件处理方法:

Private Sub MaskedTextBox_Paint(sender As Object, e As PaintEventArgs)
    Dim mtb As MaskedTextBox = DirectCast(sender, MaskedTextBox)
    ' 只有当控件没有输入内容时才绘制提示文本
    If mtb.Text.Trim().Length = 0 Then
        ' 设置提示文本的颜色(和默认PromptChar颜色一致)
        Dim promptColor As Color = SystemColors.GrayText
        ' 获取控件的客户端区域,去掉边框的偏移
        Dim clientRect As Rectangle = mtb.ClientRectangle
        clientRect.Inflate(-2, -2) ' 调整内边距,避免文本贴边

        ' 绘制"MM"在第一个00的位置
        Dim mmRect As New Rectangle(clientRect.X, clientRect.Y, clientRect.Width \ 2 - 5, clientRect.Height)
        TextRenderer.DrawText(e.Graphics, "MM", mtb.Font, mmRect, promptColor, TextFormatFlags.HorizontalCenter Or TextFormatFlags.VerticalCenter)

        ' 绘制"SS"在第二个00的位置
        Dim ssRect As New Rectangle(clientRect.X + clientRect.Width \ 2 + 5, clientRect.Y, clientRect.Width \ 2 - 5, clientRect.Height)
        TextRenderer.DrawText(e.Graphics, "SS", mtb.Font, ssRect, promptColor, TextFormatFlags.HorizontalCenter Or TextFormatFlags.VerticalCenter)
    End If
End Sub

代码说明

  1. PromptChar设置:先把PromptChar设为空格,这样默认的占位符不会干扰我们的自定义绘制。
  2. Paint事件逻辑:只有当控件没有输入内容时,才绘制"MM"和"SS",避免覆盖用户输入的内容。
  3. 位置计算:通过拆分客户端区域,将"MM"放在前半部分,"SS"放在后半部分,确保和00:00的Mask位置对应。
  4. 样式匹配:使用SystemColors.GrayText作为提示文本颜色,和系统默认的PromptChar视觉效果一致。

这样设置后,当控件为空时就会显示MM:SS,用户输入时会自动替换对应的数字,完美满足你的需求。

内容的提问来源于stack exchange,提问作者vivek padelkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:19:52