WinForm,动态标签删除(初学者)
WinForm, Dynamic Label delete (Beginner)
我动态做了10个Label。
现在,我想用同样的方式(动态)删除它们。
我需要做什么?
谢谢..
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);
}
这是你的作业吗?
using System.Linq;
...
foreach(Control c in Controls.OfType<Label>().ToList())
{
//check if correct label if you need to
Controls.Remove(c);
}
您可以使用 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_")
。
只是一个简单的 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();
}
}
我动态做了10个Label。
现在,我想用同样的方式(动态)删除它们。
我需要做什么?
谢谢..
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);
}
这是你的作业吗?
using System.Linq;
...
foreach(Control c in Controls.OfType<Label>().ToList())
{
//check if correct label if you need to
Controls.Remove(c);
}
您可以使用 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_")
。
只是一个简单的 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();
}
}