Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinForm,动态标签删除(初学者)_C#_Winforms_Dynamic_Label - Fatal编程技术网

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

C# WinForm,动态标签删除(初学者),c#,winforms,dynamic,label,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);

我动态制作了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);
}
for(int i=1;i<11;i++)
{
var myLabel=new System.Windows.Forms.Label();
myLabel.Text=“dynaLabel_u216;”+i.ToString();
myLabel.Location=新系统图纸点(200,i*23);
控件。添加(myLabel);
Application.DoEvents();
睡眠(199);
}

这是你的家庭作业吗

using System.Linq;
...
foreach(Control c in Controls.OfType<Label>().ToList())
{
    //check if correct label if you need to
    Controls.Remove(c);

}
使用System.Linq;
...
foreach(Controls.OfType().ToList()中的控件c)
{
//如果需要,请检查标签是否正确
控制。移除(c);
}

这是你的家庭作业吗

using System.Linq;
...
foreach(Control c in Controls.OfType<Label>().ToList())
{
    //check if correct label if you need to
    Controls.Remove(c);

}
使用System.Linq;
...
foreach(Controls.OfType().ToList()中的控件c)
{
//如果需要,请检查标签是否正确
控制。移除(c);
}

您可以使用
控件
LINQ
其中
来执行此项工作:

var labels = Controls.Cast<Control>()
    .Where(c => c is Label && c.Text.StartsWith("dynaLabel_"));
foreach (var label in labels){
    Controls.Remove(label);
    label.Dispose();
}
var labels=Controls.Cast()
其中(c=>c是Label&&c.Text.StartsWith(“dynaLabel”);
foreach(标签中的变量标签){
控制。移除(标签);
label.Dispose();
}

由于您将标签创建为
标签
,并且
文本
动态标签
的值开头,因此您的
LINQ
也应该可以找到这些特定的标签。因此,您可以同时使用
c is Label
StartsWith(“dynaLabel”)

您可以使用
控件和
LINQ
,其中
执行以下操作:

var labels = Controls.Cast<Control>()
    .Where(c => c is Label && c.Text.StartsWith("dynaLabel_"));
foreach (var label in labels){
    Controls.Remove(label);
    label.Dispose();
}
var labels=Controls.Cast()
其中(c=>c是Label&&c.Text.StartsWith(“dynaLabel”);
foreach(标签中的变量标签){
控制。移除(标签);
label.Dispose();
}
由于您将标签创建为
标签
,并且
文本
动态标签
的值开头,因此您的
LINQ
也应该可以找到这些特定的标签。因此,您可以同时使用
c is Label
StartsWith(“dynaLabel”)

只是一个简单的for循环,您应该在其中找到标签,将其从
控件中删除,并释放分配的资源:

// 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();
  }
}
只是一个简单的for循环,您应该在其中找到标签,将其从
控件中删除,然后释放分配的资源:

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


你试过从
控件中删除它们吗?@Alex非常感谢commet。你所说的“控件”是什么意思?如果你给控件命名为“dynalabel\uuu”+i.tostring(),你会发现这会更容易,因为你可以通过名称查看,而不会意外地删除一个你想保留的标签。除非你完全理解其后果:@DonBoitnott Nah。。如果我“/”了这些事件,一切都不会改变。甚至连标签都没有。你试过把它们从
控件中删除吗?@Alex非常感谢commet。你所说的“控件”是什么意思?如果你给控件命名为“dynalabel\uuu”+i.tostring(),你会发现这会更容易,因为你可以通过名称查看,而不会意外地删除一个你想保留的标签。除非你完全理解其后果:@DonBoitnott Nah。。如果我“/”了这些事件,一切都不会改变。甚至,根本没有标签。哈哈。。有点给40多岁的学生。我来看看。谢谢。简短错误:错误CS1061“Control.ControlCollection”不包含“ToList”的定义,并且找不到接受类型为“Control.ControlCollection”的第一个参数的扩展方法“ToList”(是否缺少using指令或程序集引用?)是否有
using System.Linq在页面顶部?嗯。刚刚添加了“usingsystem.Linq;”LoL。。有点给40多岁的学生。我来看看。谢谢。简短错误:错误CS1061“Control.ControlCollection”不包含“ToList”的定义,并且找不到接受类型为“Control.ControlCollection”的第一个参数的扩展方法“ToList”(是否缺少using指令或程序集引用?)是否有
using System.Linq在页面顶部?嗯。刚刚添加了“using System.Linq;”不幸的是,这会导致资源泄漏:您应该
Dispose
删除标签谢谢,
Dispose
被添加。谢谢。我刚看到。我也要试试@杰森:好的,试试看。:)调用
cast
is label
是多余的,只需使用type()进行筛选和转换,还可以减少装箱浪费。这将导致资源泄漏:您应该
Dispose
删除标签谢谢,
Dispose
已添加。谢谢。我刚看到。我也要试试@杰森:好的,试试看。:)调用
cast
is-label
是多余的,只需使用type()进行筛选和转换,还可以减少装箱浪费。我刚看到。它看起来很漂亮!!工作得很漂亮。一、 特别是“正则表达式”部分。非常感谢!!谢谢我刚看到。它看起来很漂亮!!工作得很漂亮。一、 特别是“正则表达式”部分。非常感谢!!