在创建对象之前使用它

时间:2013-06-18 20:41:23

标签: c# forms dynamic

我想要一个listBox SelectedIndexChanged事件, 动态创建一些控件[标签和轨道栏] 现在,在我想创建它们之前,我需要删除所有标签和轨道栏。

不是每个列表框SelectedIndexChanged事件都需要生成尽可能多的标签和文本框。 我如何确保每次调用事件时 控件的价格金额已创建。

当前的想法:删除跟踪栏和标签,而不是创建它们,但当然你会收到一个错误说,跟踪栏/标签不存在。

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

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);
}

1 个答案:

答案 0 :(得分:3)

在创建之前,遍历所有类型轨迹栏的表单控件并将其处理

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