WinForm,动态标签删除(初学者)

时间:2016-05-19 12:54:32

标签: c# winforms dynamic label

我动态制作了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);
}

enter image description here

3 个答案:

答案 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)

您可以使用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_")

答案 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();
  }
}