C# - 如何动态更改MaskedTextBox的掩码?

时间:2014-06-09 17:58:50

标签: c# validation custom-controls maskedtextbox

问题在于: 我使用MaskedTextBox作为手机面具。但是,Mask必须接受两种掩码,例如,默认掩码就像这样(00)0000-0000,但有时掩码需要多一个插槽,如此(00)0000-00000。 这个过程必须是动态的。如果用户键入超过10个字符,MaskedTextBox将更改自己的掩码。 前段时间,我使用VB.Net制作它,但现在,我需要使用C#。

这里只是我前一段时间使用VB.NET的一个例子。

Private Sub MaskedTextValidacao_Validating(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles Me.Validating
    Me.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals

    If Me.Text.Contains(" ") Or Me.Text.EndsWith(" ") Or Me.Text.StartsWith(" ") Then
        Me.Text.Replace(" ", "")
    End If

    If Me.Text.Count.Equals(10) Or Me.MaskCompleted.Equals(True) Then
        Me.BackColor = Color.LightGreen
        Me.Text = Me.Text.TrimEnd
    ElseIf Me.Text = "" Then
        Me.BackColor = Color.White
    Else
        Me.BackColor = Color.LightCyan
    End If

End Sub

现在,我正在努力改善并使用C#。

有人能帮助我吗?我的意思是,请给我一个亮点,因为我被卡住了!

3 个答案:

答案 0 :(得分:0)

你正在寻找这个我认为(其中maskedTextBox1是表单上的控件):所以当表单启动时它默认为Mask

 this.maskedTextBox1.Mask = "(00) 0000-0000";

当用户输入值并且Mask已满时,您可以再次更改掩码:

 private void maskedTextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (this.maskedTextBox1.MaskFull)
        {
            this.maskedTextBox1.Mask = "(00) 0000-00000";
        }
    }

您可以自定义按键/按键事件以动态获取值。

答案 1 :(得分:0)

感谢您的回答。我尝试了一些东西,它正在发挥作用。

使用颜色来识别字段是否正确。它还修改了蒙版。 其中大部分都在休假活动中。

想:

  1. 用户键入10位数(00)0000-0000
  2. 的数字
  3. 用户离开该字段
  4. 然后,用户再次在该字段中输入并添加一个新数字(00)     0000-00000
  5. 用户离开该字段
  6. 再次,用户输入字段并删除一些数字(00) 0000-0000
  7. EVENT LEAVE可以解决这个问题。我只想知道如何以“专业方式”做到这一点, 我的意思是,这个MaskedTextBox将成为Class的一部分与其他Custom Controls,所以... 有更好的方式来做我喜欢的事情吗?

    这是我制作的代码,再次,谢谢你们!

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace MaskedTextBox
    {
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }
    
        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            if (maskedTextBox1.MaskFull)
            {
                maskedTextBox1.Mask = "(00) 0000-00000";
                maskedTextBox1.BackColor = Color.LightYellow;
            }
        }
    
    
        private void maskedTextBox1_Enter(object sender, EventArgs e)
        {
            maskedTextBox1.BackColor = Color.LightBlue;
        }
    
    
        private void maskedTextBox1_Leave(object sender, EventArgs e)
        {
    
            if (maskedTextBox1.MaskFull)
            {
                maskedTextBox1.BackColor = Color.LightGreen;
            }
            else
            {
                maskedTextBox1.Mask = "(00) 0000-0000";
                maskedTextBox1.BackColor = Color.LightGreen;
            }
    
            if (!maskedTextBox1.MaskCompleted)
            {
                maskedTextBox1.BackColor = Color.LightCoral;
            }
        }
    }
    }
    

答案 2 :(得分:0)

你可以这样:

 public class CustomMaskedBox : MaskedTextBox
{
    public CustomMaskedBox()
    {
        this.MaskInputRejected += CustomMaskedBox_MaskInputRejected;
        this.Enter += CustomMaskedBox_Enter;
        this.Leave += CustomMaskedBox_Leave;
    }

    void CustomMaskedBox_Leave(object sender, EventArgs e)
    {
        if (this.MaskFull)
        {
            this.BackColor = Color.LightGreen;
        }
        else
        {
            this.Mask = "(00) 0000-0000";
            this.BackColor = Color.LightGreen;
        }

        if (!this.MaskCompleted)
        {
            this.BackColor = Color.LightCoral;
        }

    }

    void CustomMaskedBox_Enter(object sender, EventArgs e)
    {
        this.BackColor = Color.LightBlue;
    }

    void CustomMaskedBox_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
    {
        if (this.MaskFull)
        {
            this.Mask = "(00) 0000-00000";
            this.BackColor = Color.LightYellow;
        }
    }
}