如何在MaskedTextBox上启用/禁用按钮?

时间:2016-11-16 11:11:01

标签: c# winforms textbox

我有一个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;
        }
    }

2 个答案:

答案 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;