问题在于: 我使用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#。
有人能帮助我吗?我的意思是,请给我一个亮点,因为我被卡住了!
答案 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)
感谢您的回答。我尝试了一些东西,它正在发挥作用。
使用颜色来识别字段是否正确。它还修改了蒙版。 其中大部分都在休假活动中。
想:
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;
}
}
}