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);

}

您可以使用 ControlsLINQ 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 LabelStartsWith("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();
  }
}