清除表格上的大部分标签,而不是全部

Posted

技术标签:

【中文标题】清除表格上的大部分标签,而不是全部【英文标题】:Clearing MOST labels on form, NOT all 【发布时间】:2014-01-03 18:38:06 【问题描述】:

我需要清除我的 Windows 窗体应用程序上的 32 个标签,还有其他标签存在,但我确实想要清除这些。有没有更有效和更少编码的方式来做到这一点?我目前使用方法的代码如下:(sn-p)

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

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

【问题讨论】:

标签都在同一个面板中吗?然后您可以循环面板的子项并检查名称是否介于 label50 和 label82 之间。但这不会有效率。 无论您做什么,都将归结为确定要清除的部分和要留下的部分之间的区别。所有的答案都解决了这个问题。选择随着时间的推移最不可能改变的选项。意思是避免你可能改变的东西,这会破坏你的“搜索”逻辑。 【参考方案1】:

您可以将对象添加到要清除的LabelTag

Label label50 = new Label();
bool deleteMe = true;
label50.Tag = deleteMe;

然后只需遍历您的标签并清除所有Tagtrue 的位置:

foreach(Label lbl in myLabels)

    if(lbl.Tag != null && lbl.Tag is bool && (bool)lbl.Tag == true)
    
        lbl.Text = String.Empty;
    

【讨论】:

【参考方案2】:

尝试以下行:

foreach (Label _label in this.Controls.OfType<Label>().Where(a => a.Name != "Lable32").Select(a => a).ToArray())
            _label.Text = string.Empty;

如果有很多,请在 where 条件下添加不可移除标签。这里除了lable32之外的所有标签文本都将设置为空。

【讨论】:

【参考方案3】:

我建议您将所有需要清除的标签放在某种硬币容器中。这样你就可以做一些事情:

foreach (var child in container.Children)

    if (child is Label)
    
        ((Label)child).Text=String.Empty;
    

我对WinForms不是很熟悉,但我认为那里有容器。

【讨论】:

【参考方案4】:

将您不想清除的标签的 Tag 属性设置为字符串 "DoNotClear"(使用属性窗口或代码),然后使用以下 LINQ 代码:

foreach (var label in Controls.OfType<Label>().Where(l => l.Tag != "DoNotClear"))
    label.Text = string.Empty;

【讨论】:

【参考方案5】:

解决方案:您可以使用Controls.Find() 方法查找从id label50label82 的控件,并为每个识别的Label 分配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;
            
        

【讨论】:

【参考方案6】:

如果所有标签的名称都像 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+$"))

【讨论】:

以上是关于清除表格上的大部分标签,而不是全部的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚如何返回部分视图而不是全部

有没有办法做 gsp 部分而不是标签库?

jq 元素标签刚开始显示一部分 点击展开全部 显示完全

如何隐藏博客标签搜索中的小部件

visualstudio部分快捷键

在 iOS 中单击按钮时的标签和框架扩展