我正在尝试创建一个自定义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;
}
}
}
答案 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;
}