如何在 TextChange 事件中更改 MaskedTextBox 的文本颜色?
How to change text color of a MaskedTextBox on TextChange event?
我有以下 class 来自 MaskedTextBox。
当输入的文本长度小于预定义文本(000000000000
,长度为 12)时,我想以红色突出显示文本,否则以绿色突出显示。
在我的自定义 MaskedTextBox class 中,如果输入的文本长度不是 12(无效),我会尝试在 OntextChange
方法覆盖中将文本颜色更改为红色或绿色.
但是我写的代码不行。
颜色一直是红色,不会变。
public partial class MFMaskedTextBox : System.Windows.Forms.MaskedTextBox
{
private int lengthdefaultetext;
protected override void OnCreateControl()
{
base.OnCreateControl();
this.Mask = "0000-0000-0000";
this.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.Font = new System.Drawing.Font("Arial", 16);
this.TextMaskFormat = System.Windows.Forms.MaskFormat.ExcludePromptAndLiterals;
this.Text = "000000000000";
lengthdefaultetext = this.Text.Length;
this.ForeColor= System.Drawing.Color.Red;
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
if (this.Text.Length != lengthdefaultetext)
{
this.ForeColor= System.Drawing.Color.Red;
}
else
{
this.ForeColor = System.Drawing.Color.Green;
}
}
protected override void OnClick(EventArgs eventargs) {
base.OnClick(eventargs);
this.Text = "";
}
}
确保添加 TextChange 事件处理程序 OnCreateControl
this.TextChanged += new System.EventHandler(this.OnTextChanged);
您没有设置 PromptChar,而控件的文本 (000000000000
) 是立即添加的,因此 lengthdefaultetext
始终不同于文本长度(分别为 12 和 14)。
将 PromptChar 设置为预期的 '0'
字符 (this.PromptChar = '0'
),设置 ResetOnPrompt to false
so it doesn't override AllowPromptAsInput (true
as default) and use the MaskFull or MaskCompleted 属性以验证 Mask 是否已填充,根据返回值设置颜色。
InsertKeyMode 设置为 InsertKeyMode.Overwrite
,以允许覆盖现有的 0
个字符(当文本已满时无需删除一个以输入新值)。
► 将属性设置移至控件的默认构造函数。你应该总是有一个默认的构造函数。 OnCreateControl
或 OnHandleCreated
可用于 get/set 属性,这些属性取决于控件的句柄是否存在(或其相对于容器的存在)。
如果这些数字在以特定顺序插入时具有特殊含义,您可以创建自定义MaskedTextProvider to validate the input against the Mask. A custom Provider can only be specified as argument in a MaskedTextBox constructor。
using System.Drawing
using System.Windows.Forms;
public partial class MFMaskedTextBox : MaskedTextBox
{
public MFMaskedTextBox()
{
Font = new Font("Arial", 16);
InsertKeyMode = InsertKeyMode.Overwrite;
ResetOnPrompt = false;
TextAlign = HorizontalAlignment.Center;
TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
PromptChar = '0';
Text = "000000000000";
Mask = "0000-0000-0000";
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
ForeColor = MaskCompleted ? Color.Green : Color.Red;
}
}
我有以下 class 来自 MaskedTextBox。
当输入的文本长度小于预定义文本(000000000000
,长度为 12)时,我想以红色突出显示文本,否则以绿色突出显示。
在我的自定义 MaskedTextBox class 中,如果输入的文本长度不是 12(无效),我会尝试在 OntextChange
方法覆盖中将文本颜色更改为红色或绿色.
但是我写的代码不行。
颜色一直是红色,不会变。
public partial class MFMaskedTextBox : System.Windows.Forms.MaskedTextBox
{
private int lengthdefaultetext;
protected override void OnCreateControl()
{
base.OnCreateControl();
this.Mask = "0000-0000-0000";
this.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
this.Font = new System.Drawing.Font("Arial", 16);
this.TextMaskFormat = System.Windows.Forms.MaskFormat.ExcludePromptAndLiterals;
this.Text = "000000000000";
lengthdefaultetext = this.Text.Length;
this.ForeColor= System.Drawing.Color.Red;
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
if (this.Text.Length != lengthdefaultetext)
{
this.ForeColor= System.Drawing.Color.Red;
}
else
{
this.ForeColor = System.Drawing.Color.Green;
}
}
protected override void OnClick(EventArgs eventargs) {
base.OnClick(eventargs);
this.Text = "";
}
}
确保添加 TextChange 事件处理程序 OnCreateControl
this.TextChanged += new System.EventHandler(this.OnTextChanged);
您没有设置 PromptChar,而控件的文本 (000000000000
) 是立即添加的,因此 lengthdefaultetext
始终不同于文本长度(分别为 12 和 14)。
将 PromptChar 设置为预期的 '0'
字符 (this.PromptChar = '0'
),设置 ResetOnPrompt to false
so it doesn't override AllowPromptAsInput (true
as default) and use the MaskFull or MaskCompleted 属性以验证 Mask 是否已填充,根据返回值设置颜色。
InsertKeyMode 设置为 InsertKeyMode.Overwrite
,以允许覆盖现有的 0
个字符(当文本已满时无需删除一个以输入新值)。
► 将属性设置移至控件的默认构造函数。你应该总是有一个默认的构造函数。 OnCreateControl
或 OnHandleCreated
可用于 get/set 属性,这些属性取决于控件的句柄是否存在(或其相对于容器的存在)。
如果这些数字在以特定顺序插入时具有特殊含义,您可以创建自定义MaskedTextProvider to validate the input against the Mask. A custom Provider can only be specified as argument in a MaskedTextBox constructor。
using System.Drawing
using System.Windows.Forms;
public partial class MFMaskedTextBox : MaskedTextBox
{
public MFMaskedTextBox()
{
Font = new Font("Arial", 16);
InsertKeyMode = InsertKeyMode.Overwrite;
ResetOnPrompt = false;
TextAlign = HorizontalAlignment.Center;
TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
PromptChar = '0';
Text = "000000000000";
Mask = "0000-0000-0000";
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
ForeColor = MaskCompleted ? Color.Green : Color.Red;
}
}