C# WinForm,动态标签删除(初学者)
我动态制作了10个标签 现在,我想用同样的方法(动态地)删除它们 我该怎么办 谢谢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);
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()进行筛选和转换,还可以减少装箱浪费。我刚看到。它看起来很漂亮!!工作得很漂亮。一、 特别是“正则表达式”部分。非常感谢!!谢谢我刚看到。它看起来很漂亮!!工作得很漂亮。一、 特别是“正则表达式”部分。非常感谢!!