在文本框上禁用显示空字符串

时间:2014-09-11 17:14:09

标签: c# winforms textbox

我正在尝试创建一个自定义TextBox,当它被禁用时显示空字符串(Enabled = false)。 当我再次启用它时,它应显示最后一个值。此外,Text属性应始终返回实际值,即使它已被禁用。

到目前为止,这是我所拥有的,但它并没有真正按照我的意愿运作。

你能帮我弄清楚出了什么问题吗?

public class TestTextBox: System.Windows.Forms.TextBox
{
    private string _text = string.Empty;
    public new string Text
    {
        get
        {
            return _text;
        }
        set
        {
            _text = value;
            base.Text = FormatValue(value);
        }
    }

    protected override void OnEnabledChanged(EventArgs e)
    {
        base.OnEnabledChanged(e);

        base.Text = FormatValue(_text);
    }

    private string FormatValue(string text)
    {
        if(this.Enabled == true)
        {
            return text;
        }
        else
        {
            return string.Empty;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

这样的事情怎么样:

protected override void OnEnabledChanged(EventArgs e)
{
    base.OnEnabledChanged(e);

    this.ForeColor = this.Enabled ? SystemColors.ControlText : this.BackColor;
}

如果您想支持其他ForeColors,您可以将当前的ForeColor存储在一个Property中,然后使用它而不是SystemColors.ControlText

答案 1 :(得分:2)

我认为代码中的错误是输入它并不会改变其Text属性。

如果您添加一个按钮:

testTextBox1.Text = "It works";

然后启用和禁用TestTextBox将在空和&#34之间切换;它可以正常工作"。

修改

添加:

protected override void OnTextChanged(EventArgs e)
{
    base.OnTextChanged(e);
    if (Enabled)
        Text = base.Text;
}