清除表单上的MOST标签,而不是全部

时间:2013-12-16 11:27:05

标签: c# winforms visual-studio .net-3.5

我需要在我的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
}

我已经研究过,但它总是清除所有标签/文本框。

6 个答案:

答案 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()方法查找从label50label82的控件,并为每个标识的标签指定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+$"))