【问题标题】:Use an object, before it's created在创建对象之前使用它
【发布时间】:2013-06-15 05:40:19
【问题描述】:

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

并非每个列表框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);
}

【问题讨论】:

    标签: c# forms dynamic


    【解决方案1】:

    只需在创建之前,遍历所有类型为 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

    【讨论】:

    • 它确实有效,但我的表单上有一些我不想删除的轨迹栏。有什么帮助吗?不是动态创建的
    • @user1859829 这段代码只是遍历了trackbar控件,标签不受影响
    • 我将轨迹栏更改为标签,因为我需要动态创建的标签和轨迹栏以进行删除。因此,如果我有一个不想被删除的跟踪栏(不是动态创建的),仍然会被删除。感谢您的回复。
    • 它不起作用,我收到一条错误消息,提示“对象引用未设置为对象的实例”
    猜你喜欢
    • 2013-06-16
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2013-03-22
    相关资源
    最近更新 更多