将标签重置回设计时 .Text 值
Reseting label back to design-time .Text value
我有一堆标签,我在设计器中设置了它们的值,稍后在 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 OnControlAdded(ControlEventArgs e)
{
defaultValue = this.Text;
MessageBox.Show("This code is being run");
base.OnControlAdded(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 OnPaint(PaintEventArgs e)
{
if(defaultValue == "" && !this.Text.Contains("exLabel"))
{
defaultValue = this.Text;
}
base.OnPaint(e);
}
public void ResetValue()
{
this.Text = defaultValue;
}
}
我有一堆标签,我在设计器中设置了它们的值,稍后在 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 OnControlAdded(ControlEventArgs e)
{
defaultValue = this.Text;
MessageBox.Show("This code is being run");
base.OnControlAdded(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 OnPaint(PaintEventArgs e)
{
if(defaultValue == "" && !this.Text.Contains("exLabel"))
{
defaultValue = this.Text;
}
base.OnPaint(e);
}
public void ResetValue()
{
this.Text = defaultValue;
}
}