1

我想在 listBoxSelectedIndexChanged事件上,在我想创建这些控件之前动态创建一些控件 [标签和轨迹栏],我需要删除所有标签和轨迹栏。

并非在每个列表框SelectedIndexChanged事件上都需要生成尽可能多的标签和文本框。我如何确保每次调用事件时都会创建控件的价格数量。

当前的想法:删除trackbar和labels,而不是创建它们,但是你当然会得到一个错误,trackbar/label不存在。

到目前为止我想到的代码:

if (trackbar != null)
{
    trackBar.Dispose();
}

for (int i = 0; i < calc; i++)
{

    Label Label = new Label();
    Label.Name = "TrackbarWidth" + a++;
    Label.Text = "Board -" + a + "- Height:";
    Label.Location = new Point(10, 450 + (50 * c));
    Label.Size = new System.Drawing.Size(100, 25);
    this.Controls.Add(Label);

    TrackBar trackBar = new TrackBar();
    trackBar.Name = "TrackbarWidth" + c++;
    trackBar.Maximum = 85;
    trackBar.Minimum = 65;
    trackBar.SmallChange = 5;
    trackBar.TickFrequency = 5;
    trackBar.Value = 65;
    trackBar.Location = new Point(150, 450 + (50 * c));
    trackBar.Size = new System.Drawing.Size(100, 25);
    TrackBarAdded.Insert(0, trackBar);
    this.Controls.Add(trackBar);
}
4

1 回答 1

3

在创建之前,遍历所有类型为 trackbar 的表单控件并处理它

foreach(TrackBar t in this.Controls.OfType<TrackBar>())
{
   t.Dispose();
}

如果您有任何不想删除的控件,可以使用它的 Tag 属性添加一些标志值,这将帮助您标记您不想删除的控件

Ex: 
     Label a = new Label();
     a.Tag = "non-disposal";
     Label b = new Label();

     foreach(Label l in this.Controls.OfType<Label>())
     {
         if(l.Tag.ToString()!="non-disposal")
             l.Dispose();
     }

所以Label a不会被删除,而不是b

于 2013-06-18T20:45:21.317 回答