禁止退格,删除MaskedTextbox中的键

时间:2009-06-18 08:49:19

标签: c# winforms

问题很简单:怎么做? 我有几个MaskedTextbox,它们由一些间接的用户操作填充(所以不能直接输入值)。当掩码拒绝输入时,文本框中的文本将显示为红色。好到目前为止。

但是,我不希望最终用户能够直接编辑这些框。所以,我添加了以下代码:

    private void HandleMaskedTextBoxKeyPress(object sender, KeyPressEventArgs e)
    {
        e.Handled = true;
    }

    private void HandleMaskedTextBoxKeyDown(object sender, KeyEventArgs e)
    {
        e.Handled = true;
        e.SuppressKeyPress = true;
    }

虽然处理了大多数字符,但退格键和删除键不是:按下这些键时文本消失。如何处理这些密钥呢?

(另一种选择是将框的readonly属性设置为true,但是当输入被拒绝时,文本不会再变为红色。我试图强制使用红色在MaskInputRejected事件中,但这也没有成功。)

2 个答案:

答案 0 :(得分:1)

我认为将MaskedTextBox的{​​{1}}属性设置为ReadOnly是个好主意。但是,您应该使用true事件,而不是处理MaskInputRejected事件:

TypeValidationCompleted

由于我猜您要通过代码修改private void maskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs e) { maskedTextBox1.ForeColor = e.IsValidInput ? Color.Black : Color.Red; } 的值,因此您还必须处理MaskedTextBox事件以触发此类验证:

TextChanged

最后(这是关键),因为private void maskedTextBox1_TextChanged(object sender, EventArgs e) { maskedTextBox1.ValidateText(); } 将是只读的,您需要将MaskedTextBoxBackColor属性设置回ForeColor并且分别是Color.White,但是您必须在代码中,在表单的构造函数中执行此操作...

Color.Black

如果你有很多,我建议你创建一个继承自maskedTextBox1.BackColor = Color.White; maskedTextBox1.ForeColor = Color.Black; 的新控件并覆盖这些值。

答案 1 :(得分:0)

您可以使用richtextbox。将只读设置为true,并使用代码beind屏蔽字符。

我希望有所帮助。  RG