我有一个maskedTextBox和一个Save按钮。现在我想在用户输入内容时启用“保存”按钮,如果maskedTextBox为空则禁用。我已经为textBox上的文本框的textChanged事件做了这个并且正常工作但是我无法在蒙版的TextBox textChanged事件上做到这一点。这是我的代码。请帮忙
private void mtbCNIC_TextChanged(object sender, EventArgs e)
{
if (mtbCNIC.Text == "")
{
btnSave.Enabled = false;
}
else
{
btnSave.Enabled = true;
}
}
答案 0 :(得分:1)
我认为问题是Text
也返回了掩码字符,因此尽管用户没有设置任何文本,但仍然存在来自这些字符的文本。 (您可以通过添加断点并检查Text
)
您应该只能通过在检查前更改TextMaskFormat
属性来获取用户输入的部分文本,然后再将其设置回来。
编辑:不幸的是,更改TextMaskFormat
似乎也会触发TextChanged
事件,如果不小心处理,可能会导致堆栈溢出。这可以通过使用标志来抑制事件代码来避免,如下所示:
bool suppressTextChanged = false;
private void mtbCNIC_TextChanged(object sender, EventArgs e)
{
if (suppressTextChanged)
return;
suppressTextChanged = true;
mtbCNIC.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
btnSave.Enabled = mtbCNIC.Text != string.Empty;
mtbCNIC.TextMaskFormat = MaskFormat.IncludeLiterals;
suppressTextChanged = false;
}
答案 1 :(得分:1)
通常,检查文本是否有值是不是很有用,您需要有一个有效的输入来启用按钮。我更愿意依赖:
this.button1.Enabled = this.maskedTextBox1.MaskCompleted;
面具是00000-0000000-0
对于这样的特定掩码,您只需从文本中简单地排除-
和_
并检查长度:
var str = this.maskedTextBox1.MaskedTextProvider.ToDisplayString();
this.button1.Enabled = str.Replace("-", "").Replace("_", "").Length > 0;