清除表格上的大部分标签,而不是全部
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】:您可以将对象添加到要清除的Label
的Tag
。
Label label50 = new Label();
bool deleteMe = true;
label50.Tag = deleteMe;
然后只需遍历您的标签并清除所有Tag
是true
的位置:
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 label50
到label82
的控件,并为每个识别的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+$"))
【讨论】:
以上是关于清除表格上的大部分标签,而不是全部的主要内容,如果未能解决你的问题,请参考以下文章