![](/img/trans.png)
[英]How can i use the “String.Empty” functionality to get rid of words from a text but for multiple different words at once in c#
[英]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.