簡體   English   中英

將 label 重置回設計時文本值

[英]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(); 對此不起作用,因為 label 文本被清除而不是返回“當前沒有可用的水果”

我目前的解決方案是制作自定義 label 控件。

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()沒有被執行,當lbl_fruits.Text = "banana"; OnPaint()再次運行時發生。

所以問題是:我可以覆蓋哪個事件,以便在加載 label 但不會運行兩次后立即執行代碼。 而且,有沒有更簡單的方法來解決這個問題?

最后我使用的解決方案是這樣的:

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM