问题很简单:怎么做? 我有几个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
事件中,但这也没有成功。)
答案 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();
}
将是只读的,您需要将MaskedTextBox
和BackColor
属性设置回ForeColor
并且分别是Color.White
,但是您必须在代码中,在表单的构造函数中执行此操作...
Color.Black
如果你有很多,我建议你创建一个继承自maskedTextBox1.BackColor = Color.White;
maskedTextBox1.ForeColor = Color.Black;
的新控件并覆盖这些值。
答案 1 :(得分:0)
您可以使用richtextbox。将只读设置为true,并使用代码beind屏蔽字符。
我希望有所帮助。 RG