2013-06-18 69 views
1

我想在一個列表框SelectedIndexChanged事件, 之前動態創建一些控件[標籤和trackbars] 現在,我需要刪除所有標籤和trackbars。之前,我想創建那些使用對象,它的創建

不是每個列表框SelectedIndexChanged事件都需要生成儘可能多的標籤和文本框。 我如何確保每次調用事件 時都創建了控件的價格數量。

當前的想法:刪除跟蹤欄和標籤,而不是創建它們,但當然你會得到一個錯誤,說明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); 
} 

回答

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

so Label a不會被刪除,而不是b

+0

它確實有效,但我的表單上有一些我不想刪除的trackbars。任何幫助?那些不是動態創建的 – user1859829

+0

@ user1859829此代碼只是通過trackbar控件迭代,標籤不受影響 –

+0

由於我需要動態創建的標籤和軌跡條被刪除,因此我將軌跡條更改爲標籤。所以如果我有一個不想被刪除的trackbar(一個不是動態創建的)仍然會被刪除。感謝您的答覆。 – user1859829