【问题标题】:How to Enable/Disable Button on MaskedTextBox?如何启用/禁用 MaskedTextBox 上的按钮?
【发布时间】:2016-11-16 19:59:18
【问题描述】:

我有一个 maskedTextBox 和一个保存按钮。现在我想在用户输入内容时启用保存按钮,如果 maskedTextBox 为空则禁用。我已经为文本框的 textChanged 事件上的文本框做到了这一点并且工作正常,但我无法在蒙面的 TextBox textChanged 事件上做到这一点。这是我的代码。请帮忙

private void mtbCNIC_TextChanged(object sender, EventArgs e)
    {
        if (mtbCNIC.Text == "")
        {

            btnSave.Enabled = false;
        }
        else
        {

            btnSave.Enabled = true;
        }
    }

【问题讨论】:

  • 你的代码应该可以正常工作,你确定事件被钩住了
  • 代码看起来不错。你调试了吗?

标签: c# winforms textbox


【解决方案1】:

一般来说,检查文本是否有值并不是那么有用,您需要有一个有效的输入来启用按钮。我更喜欢依赖:

this.button1.Enabled = this.maskedTextBox1.MaskCompleted;

掩码为 00000-0000000-0

对于这样一个特定的掩码,您可以简单地从文本中排除 -_ 并检查长度:

var str = this.maskedTextBox1.MaskedTextProvider.ToDisplayString();
this.button1.Enabled = str.Replace("-", "").Replace("_", "").Length > 0;

【讨论】:

  • 是的,它做得很好,但我希望每当用户输入单个输入时,按钮启用,当他/她删除时,它会禁用 @Reza
  • Mask 的值是多少?
  • Mask 是 00000-0000000-0
  • Text 中简单地排除-_ 并检查长度。
  • 查看示例代码。请记住,this.button1.Enabled 在开始时应该是 false
【解决方案2】:

我认为问题在于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;
}

【讨论】:

  • 我做了同样的兄弟,但现在它抛出 An unhandled exception of type 'System.StackOverflowException' occurred in System.Windows.Forms.dll Exception @mus
  • @khaafi:好的,我解决了这个问题,但现在它变得有点麻烦,所以其他答案可能更好。但是,这个解决方案是通用的,不需要代码知道具体的掩码细节。
  • 感谢哥们的时间和帮助,如果你也想分享这个方法,我会很高兴@musefan
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2011-12-16
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
相关资源
最近更新 更多