簡體   English   中英

如何獲取表單上的所有標簽並將具有特定名稱模式的標簽的 Text 屬性設置為 string.empty?

[英]How can I get all Labels on a form and set the Text property of those with a particular name pattern to string.empty?

我想清除表單上的所有值,其中控件是一個標簽,其名稱以“label”開頭

這段代碼:

List<Label> lbls = this.Controls.OfType<Label>().ToList();
foreach (var lbl in lbls)
{
    if (lbl.Name.StartsWith("label"))
    {
        lbl.Text = string.Empty;
    }
}

...不起作用,因為 lambda 什么也沒找到 - lbls.Count = 0。

這不會獲得表單上的所有控件,甚至是其他控件的子控件(例如,在我的情況下,面板)?

嘗試使用此方法:

public void ClearLabel(Control control)
{
   if (control is Label)
   {
       Label lbl = (Label)control;
       if (lbl.Text.StartsWith("label"))
           lbl.Text = String.Empty;

   }
   else
       foreach (Control child in control.Controls)
       {
           ClearLabel(child);
       }

}

您只需要將表單傳遞給 ClearLabel 方法。

不,它不會遞歸搜索面板。

要做你想做的事,你可以這樣做:

void changeLabel(Control c)
{
    if (lbl.Name.StartsWith("label"))
    {
        lbl.Text = string.Empty;
    }

    foreach(Control _c in c.Controls)
        changeLabel(_c);
}

這不涉及前面答案中提出的遞歸問題; 這只是另一種更簡潔的表達你所擁有的方式:

var labels = Controls.OfType<Label>().Where( x => x.Name.StartsWith("label") );
foreach (var label in labels)
{
    label.Text = "";
}

這就是我最終寫的內容,我想在這里添加它只是為了完整性 - 本質上,您不需要ToList() ,並且String.Empty多年來沒有比""有任何優勢。

暫無
暫無

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

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