如何解决将标签重置回设计时 .Text 值
我有一堆标签,我在设计器中设置了它们的值,稍后在 runtime
期间更新它们,但是在使用它们之后,我想将它们设置回它们的默认值。我这样做的目的是减少大型代码的数量,使其更易于阅读。
随机示例,在lbl_fruit
Text = no fruits available currently
的设计器中设置然后
*code*
lbl_fruits.Text = "banana";
*code*
lbl_fruits.ResetText(); // I want something like this
lbl_fruits.Text = "no fruits available currently"; // Instead of this
.ResetText();
对此不起作用,因为标签文本被清除而不是返回“当前没有水果可用”
public class ExLabel : Label
{
private string defaultValue = "";
public string DefaultValue
{
get { return defaultValue; }
set { defaultValue = value; this.Invalidate(); }
}
protected override void OnControlAdded(ControlEventArgs e)
{
defaultValue = this.Text;
MessageBox.Show("This code is being run");
base.OnControlAdded(e);
}
public void ResetValue()
{
this.Text = defaultValue;
}
}
如果我使用我创建的自定义属性,此代码目前可以解决我的问题,但对我而言,理想的解决方案是将 design-time text
值作为默认值,而不是我创建的额外属性。 OnControlAdded()
不会被执行,OnPaint()
会在 lbl_fruits.Text = "banana";
发生时再次运行。
所以问题是:我可以覆盖哪个事件,以便在加载标签后立即执行代码,但不会运行两次。还有,有没有更简单的方法来解决这个问题?
解决方法
最后我使用的解决方案是这样的:
public class ExLabel : Label
{
private string defaultValue = "";
public string DefaultValue
{
get { return defaultValue; }
set { defaultValue = value; this.Invalidate(); }
}
protected override void OnPaint(PaintEventArgs e)
{
if(defaultValue == "" && !this.Text.Contains("exLabel"))
{
defaultValue = this.Text;
}
base.OnPaint(e);
}
public void ResetValue()
{
this.Text = defaultValue;
}
}
,
public class ExLabel : Label
{
private string defaultValue = "";
public string DefaultValue
{
get { return defaultValue; }
set { defaultValue = value; this.Invalidate(); }
}
protected override void OnControlAdded(ControlEventArgs e)
{
defaultValue = this.Text;
MessageBox.Show("This code is being run");
base.OnControlAdded(e);
}
public void ResetValue()
{
this.Text = defaultValue;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。