我正在动态绘制标签集,我想删除它们。我使用相同的按钮删除并添加新标签。使用随机坐标随机绘制标签。但是,当我按下按钮时,我应该删除旧标签并显示新标签。但是,我所拥有的是新标签出现,旧标签出现但空标签。我想让它们完全删除。见图:
//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);
}
}
答案 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();
}
}