将标签重置回设计时 .Text 值

Reseting label back to design-time .Text value

我有一堆标签,我在设计器中设置了它们的值,稍后在 runtime 更新它们,但在使用它们之后,我想将它们设置回它们的默认值。我这样做的目的是减少大代码的数量,以帮助使其更易于阅读。

随机样例,在lbl_fruitText = 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;
    }
}