我动态制作了10个标签。
现在,我想以相同的方式(动态地)删除它们。
我该怎么办?
谢谢..
for( int i = 1 ; i < 11 ; i++ )
{
var myLabel = new System.Windows.Forms.Label();
myLabel.Text = "dynaLabel_" + i.ToString();
myLabel.Location = new System.Drawing.Point(200, i * 23);
Controls.Add(myLabel);
Application.DoEvents();
Thread.Sleep(199);
}
答案 0 :(得分:1)
这是你的作业吗?
using System.Linq;
...
foreach(Control c in Controls.OfType<Label>().ToList())
{
//check if correct label if you need to
Controls.Remove(c);
}
答案 1 :(得分:1)
您可以使用Controls
和LINQ
Where
来完成这项工作:
var labels = Controls.Cast<Control>()
.Where(c => c is Label && c.Text.StartsWith("dynaLabel_"));
foreach (var label in labels){
Controls.Remove(label);
label.Dispose();
}
由于您将标签创建为Label
并且Text
的值为dynaLabel_
,因此您的LINQ
也应该找到这些特定标签。因此,您同时使用c is Label
和StartsWith("dynaLabel_")
。
答案 2 :(得分:1)
只是一个简单的 for 循环,您应该找出标签,将其从Controls
和发布分配的资源中删除:
// let's use regular expression to validate name;
// String.StartsWith is also a good choice
using System.Text.RegularExpressions;
...
// while removing, loop backward
for (int i = Controls.Count - 1; i >= 0; --i) {
Label label = Controls[i] as Label;
// Control is Label with specific name
if ((label != null) && Regex.IsMatch(label.Text, "^dynaLabel_[0-9]+$")) {
Controls.RemoveAt(i);
// do not forget to release resources allocated (here is HWND - window handle)
label.Dispose();
}
}