我需要在我的Windows窗体应用程序上清除32个标签,还有其他标签,但我 NOT 想要清除它们。是否有更高效,编码更少的方法来做到这一点?我目前的代码如下使用方法:(片段)
private void ClearFields()
{
label50.Text = string.Empty;
label51.Text = string.Empty;
label52.Text = string.Empty;
label53.Text = string.Empty;
label54.Text = string.Empty;
label55.Text = string.Empty;
// Down to label82
}
我已经研究过,但它总是清除所有标签/文本框。
答案 0 :(得分:0)
您可以将对象添加到要清除的Tag
的{{1}}。
Label
然后只需遍历您的标签并清除Label label50 = new Label();
bool deleteMe = true;
label50.Tag = deleteMe;
Tag
所在的所有位置:
true
答案 1 :(得分:0)
请尝试以下行:
foreach (Label _label in this.Controls.OfType<Label>().Where(a => a.Name != "Lable32").Select(a => a).ToArray())
_label.Text = string.Empty;
如果有多个标签,请在where条件中添加不可移动标签。除lable32
之外,所有标签文本都将设置为空。
答案 2 :(得分:0)
我建议你把所有需要清除的标签放在某种投币器中。这样你可以做某种事情:
foreach (var child in container.Children)
{
if (child is Label)
{
((Label)child).Text=String.Empty;
}
}
我对WinForms不太熟悉,但我认为那里有容器。
答案 3 :(得分:0)
将您不想清除的标签的Tag
属性设置为字符串"DoNotClear"
(使用属性窗口或代码),然后使用以下LINQ代码:
foreach (var label in Controls.OfType<Label>().Where(l => l.Tag != "DoNotClear"))
label.Text = string.Empty;
答案 4 :(得分:0)
解决方案:您可以使用Controls.Find()
方法查找从label50
到label82
的控件,并为每个标识的标签指定String.Empty
。
试试这个:
private void button1_Click(object sender, EventArgs e)
{
for(int i=50;i<83;i++)
{
this.Controls.Find("label" + i,true)[0].Text = String.Empty;
}
}
答案 5 :(得分:0)
如果您的所有标签都有label + id
var labelsToClear = from l in Controls.OfType<Label>()
let id = Int32.Parse(l.Name.Replace("label", ""))
where id >= 50 && id <= 82
select l;
foreach(var label in labelsToClear)
label.Text = String.Empty;
如果标签可以有不同的名称,则可以过滤掉与label + id
模式匹配的标签:
Controls.OfType<Label>().Where(l => Regex.IsMatch(l.Name, @"^(?:label)\d+$"))