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字段中无数据”,一旦它被加载,它将成为需要显示的值,当用户从下一个客户端加载数据时,所有内容都将被重置,只有包含数据的字段才会被加载。此外,当用户离开页面时,每个页面都将被重置。