c#以编程方式创建后删除标签

c#以编程方式创建后删除标签,c#,label,C#,Label,当我搜索数据库时,我使用下面的代码在panel1上创建多个新标签。如果我删除数据库中的一个名称,是否有机会删除标签 public void labelLocate(string name, string labelLocate, int x, int y) { // name is the ID in the database var label = this.Controls.OfType<Label>().FirstOrDefault(l => l.Name

当我搜索数据库时,我使用下面的代码在panel1上创建多个新标签。如果我删除数据库中的一个名称,是否有机会删除标签

public void labelLocate(string name, string labelLocate, int x, int y)
{
    // name is the ID in the database
    var label = this.Controls.OfType<Label>().FirstOrDefault(l => l.Name == name);
    if (label != null) this.Controls.Remove(label);
    Label labelstring = new Label();
    labelstring.Width = 0;
    labelstring.Text = name;
    labelstring.Name = name;            
    labelstring.AutoSize = true;
    this.Controls.Remove(labelstring);
    this.Controls.Add(labelstring);
    labelstring.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
    labelstring.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
    labelstring.BringToFront();

    switch (labelLocate)
    {
        case "Up": labelstring.Location = new Point(x + (panel1.Location.X + 3), (y - 20) + (panel1.Location.Y + 3));
            break;
        case "Down": labelstring.Location = new Point(x + (panel1.Location.X + 3), (y) + 5 + (panel1.Location.Y + 3));
            break;
        case "Left": labelstring.Location = new Point(x - 5 - (labelstring.Width) + (panel1.Location.X + 3), y + 5 + (panel1.Location.Y + 3));
            break;
        case "Right": labelstring.Location = new Point(x + 10 + (panel1.Location.X + 3), y + 5 + (panel1.Location.Y + 3));
            break;
    }
}
public void labelLocate(字符串名称、字符串labelLocate、int x、int y)
{
//name是数据库中的ID
var label=this.Controls.OfType().FirstOrDefault(l=>l.Name==Name);
如果(label!=null),则此.Controls.Remove(label);
标签标签字符串=新标签();
标签串宽度=0;
labelstring.Text=名称;
labelstring.Name=名称;
labelstring.AutoSize=true;
此控件。移除(标签字符串);
this.Controls.Add(labelstring);
labelstring.BorderStyle=System.Windows.Forms.BorderStyle.FixedSingle;
labelstring.TextAlign=System.Drawing.ContentAlignment.MiddleCenter;
labelstring.BringToFront();
开关(标签定位)
{
大小写“Up”:标签字符串位置=新点(x+(panel1.Location.x+3),(y-20)+(panel1.Location.y+3));
打破
案例“向下”:标签字符串位置=新点(x+(panel1.Location.x+3),(y)+5+(panel1.Location.y+3));
打破
案例“Left”:标签字符串位置=新点(x-5-(标签字符串宽度)+(panel1.Location.x+3),y+5+(panel1.Location.y+3));
打破
案例“右”:标签字符串位置=新点(x+10+(panel1.Location.x+3),y+5+(panel1.Location.y+3));
打破
}
}
您可以使用和LINQ:

var label = this.Controls.OfType<Label>().FirstOrDefault(l => l.Name == "TheID");
if(label != null)
    this.Controls.Remove(label); 
var label=this.Controls.OfType().FirstOrDefault(l=>l.Name==“TheID”);
如果(标签!=null)
此。控件。移除(标签);

找到您的控制点,然后:

if(label != null)
          label.Dispose();

使用以下代码可以更轻松地删除标签:

this.Controls.Remove(标签1)


是当前表单<代码>控件
是位于表单上的标签、按钮等
Remove()
删除目标控件。

以前尝试过此方法。在我删除数据库中的“ID”后,标签仍然存在。@JefferyLR:在数据库中删除该代码时,您必须自己调用该代码。它不会自动运行。还有,您以前试过什么代码,您试过这个代码吗?是的,在数据库中删除子例程后,我确实再次运行了它。@JefferyLR:但是在您现在在问题中发布的代码中,您在添加该控件之前正在使用我的代码。这是毫无意义的。在方法的顶部添加(imho)是没有意义的。为什么要在添加控件之前删除它?当项目在数据库中被删除时,您希望将其删除,因此您应该将其放在该方法的末尾。@Tim Schmelter我的程序能够添加/删除/编辑“ID”,因此当我更新数据库时,我必须调用此代码检查ID。如果ID有效,则创建新标签,否则删除我以前创建的标签。我试着在代码末尾加上,但还是一样。嗨,@cristi Roman。问题是如何在以编程方式创建标签时找到控件