[英]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.