C# 将标签重置回设计时。文本值
我有一堆标签,我在设计器中设置它们的值,然后在运行时更新它们,但是在使用它们之后,我想将它们设置回默认值。我这样做的目的是减少大型代码的数量,使其更易于阅读 随机示例,例如,在设计器中设置C# 将标签重置回设计时。文本值,c#,winforms,label,default-value,C#,Winforms,Label,Default Value,我有一堆标签,我在设计器中设置它们的值,然后在运行时更新它们,但是在使用它们之后,我想将它们设置回默认值。我这样做的目的是减少大型代码的数量,使其更易于阅读 随机示例,例如,在设计器中设置lbl\u水果Text=当前没有水果可用 *code* lbl_fruits.Text = "banana"; *code* lbl_fruits.ResetText(); // I want something like this lbl_fruits.Text = "no fr
lbl\u水果
Text=当前没有水果可用
*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;
}
}
如果我使用我所做的自定义属性,这段代码目前解决了我的问题,但对我来说,理想的解决方案是将设计时文本
值作为默认值,而不是我所做的额外属性OnControlAdded()
不会执行,OnPaint()
在lbl\u 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;
}
}
您所称的设计时间值将保存在资源中,并在InitializeComponents()
调用期间加载。你也可以这样做。保持当前设计,您必须在表单设计器中设置DefaultValue
,只需从setter设置Text
值。“当前没有可用的结果”意味着您正在进行某种验证或显示状态。不确定默认值是否真的那么有用,因为您可能需要多个错误:不可用、输入负数、日期来自过去等等。也许您只需要多个标签并根据错误控制其可见性?或者创建一个包含所有错误和相应文本的专用错误类?我相信在执行一些逻辑之后,您需要将值更改回默认值。理想的方法是编写一个helper方法,以确保在给定操作时重置所有控件。或者您可以调用字典映射来清除和重置。这些映射的值将用于显示的客户端数据,并且某些字段可以为空,因此它可以是数据库带来的数据,也可以是无数据,它们将显示“x字段中无数据”,一旦它被加载,它将成为需要显示的值,当用户从下一个客户端加载数据时,所有内容都将被重置,只有包含数据的字段才会被加载。此外,当用户离开页面时,每个页面都将被重置。