动态绘制后删除标签

时间:2014-05-12 05:51:02

标签: c# winforms

我正在动态绘制标签集,我想删除它们。我使用相同的按钮删除并添加新标签。使用随机坐标随机绘制标签。但是,当我按下按钮时,我应该删除旧标签并显示新标签。但是,我所拥有的是新标签出现,旧标签出现但空标签。我想让它们完全删除。见图:

enter image description here

//Global Intialization
int xCoor;
int yCoor;

//send the random method
Random coor = new Random();

private void btnRun_Click(object sender, EventArgs e) 
{
    //Removing the Labels after drawing them in the picBox
    this.RemoveOldLabels();

    //to  draw the Labels rendomely.
    for (int x = 1; x <= 25; x++)
    {
        for (int i = 0; i < 1; i++)
        {
            //Get the Coordinates for X,Y 
            xCoor = coor.Next(0, 750);
            yCoor = coor.Next(0, 500);

            //Start Greating the Labels
            Label nodeLabel1 = new Label();

            nodeLabel1.Text = x + " : " + xCoor + "," + yCoor;
            nodeLabel1.AutoSize = true;
            nodeLabel1.Location = new Point(xCoor + 10, yCoor + 5);
            nodeLabel1.ForeColor = System.Drawing.Color.Red;
            nodeLabel1.BackColor = Color.LightBlue;

            //Draw the Labels in the PicBox
            this.picNodes.Controls.Add(nodeLabel1);
        }
    }
}

//this to  remove the Labels 
private void RemoveOldLabels()
{
    List<Label> LabelsToRemove = new List<Label>();

    foreach (var x in this.picNodes.Controls)
    {
        if (x.GetType() == typeof(System.Windows.Forms.Label))
        {
            LabelsToRemove.Add((Label)x);
        }
    }

2 个答案:

答案 0 :(得分:4)

看起来RemoveOldLabels()正在查找标签,但实际上并未将其删除。

尝试获取所有“标签”控件,然后处理它们(它们也应该从集合中移除它们并使它们从表单中消失)

foreach (var label in picNodes.Controls.OfType<Label>().ToList())
    label.Dispose();

答案 1 :(得分:1)

您删除旧标签逻辑不会执行任何操作。它只是将标签添加到列表中即可。

您需要从 picNodes 中删除这些控件,如下所示:

  private void RemoveOldLabels()
  {
    List<Label> LabelsToRemove = new List<Label>();

    foreach (var x in this.picNodes.Controls)
    {
        if (x.GetType() == typeof(System.Windows.Forms.Label))
        {
            LabelsToRemove.Add((Label)x);
        }
    }

    foreach (var label in LabelsToRemove)
    {
        this.picNodes.Controls.Remove(label);
        label.Dispose();
    }
  }