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

C# 在文本框上显示空字符串禁用,c#,winforms,textbox,C#,Winforms,Textbox,我正在尝试创建一个自定义文本框,当它被禁用(Enabled=false)时,它会显示一个空字符串。 当我再次启用它时,它应该显示最后一个值。此外,文本属性应该始终返回实际值,即使它被禁用 这是我到目前为止所拥有的,但它并没有像我想要的那样工作 你能帮我找出什么毛病吗 public class TestTextBox: System.Windows.Forms.TextBox { private string _text = string.Empty; public new str

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

这是我到目前为止所拥有的,但它并没有像我想要的那样工作

你能帮我找出什么毛病吗

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;
        }
    }
}

像这样的怎么样:

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

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

如果要支持其他前景色,可以将当前前景色存储在属性中,并使用它而不是
SystemColors.ControlText

类似的内容如何:

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

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

如果您想支持其他前景色,可以将当前前景色存储在属性中,并使用它而不是
SystemColors.ControlText

我认为代码中的错误在于键入它不会更改其
Text
属性

如果添加带有以下内容的按钮:

testTextBox1.Text = "It works";
然后启用和禁用
TestTextBox
将在空和“它工作”之间切换

编辑

加:


我认为代码中的错误在于,键入它不会更改其
文本
属性

如果添加带有以下内容的按钮:

testTextBox1.Text = "It works";
然后启用和禁用
TestTextBox
将在空和“它工作”之间切换

编辑

加:



它做错了什么?启用后不会返回原始文本。它做错了什么?启用后不会返回原始文本。这是评论,不是答案@Pierre OlivierGoulet我测试了一下。它起作用了。(顺便说一句,问题是+1。这是一个非常严重的错误。)是的,只要我不在文本框中输入,它就可以工作。。。我怎样才能使它在打字时也起作用呢?Wokrs就像一个符咒!非常感谢。这是评论,不是回答@Pierre OlivierGoulet我测试了一下。它起作用了。(顺便说一句,问题是+1。这是一个非常严重的错误。)是的,只要我不在文本框中输入,它就可以工作。。。我怎样才能使它在打字时也起作用呢?Wokrs就像一个符咒!非常感谢。这是迄今为止最简单的解决方案。你也可以使用Color.Transparent来代替这个。backcolor是的,我不想使用Transparency,但它应该在这里工作;-)虽然这是一篇文章,但我会把它作为最后的手段,因为它不是“政治上正确的”……我自己也这么认为,事实上一个间谍工具可以阅读这篇文章。但如果这是你最关心的问题,我想解决方案是你最不关心的。被禁用后,文本也无法被选择,这将使其可见,因此我认为它足够安全。这是迄今为止最简单的解决方案。你也可以使用Color.Transparent来代替这个。backcolor是的,我不想使用Transparency,但它应该在这里工作;-)虽然这是一篇文章,但我会把它作为最后的手段,因为它不是“政治上正确的”……我自己也这么认为,事实上一个间谍工具可以阅读这篇文章。但如果这是你最关心的问题,我想解决方案是你最不关心的。被禁用后,文本也无法被选择,这将使其可见,因此我认为它足够安全。