微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将标签重置回设计时 .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 举报,一经查实,本站将立刻删除。