2010-01-10 113 views
1

我試圖向我的表單中的面板添加標籤數組。 我選擇了一個標籤,因爲我可以爲文字設置顏色。 如果有更好的方法,請讓我知道。向面板添加標籤陣列

下面的代碼運行正常,但只會顯示一個標籤。 我設置了一個斷點,並在添加之前查看了數組,並且所有的元素都在那裏。

但是,面板上實際只顯示一個標籤。

這是代碼。

 int y = 0; 
     int index = 0; 

     Label[] labels = new Label[10]; 

     //Add Spareboard Employees to Spare List 
     foreach (Employee employee in EmployeeList) 
     { 
       labels[index] = new Label(); 

       labels[index].Text = employee.Name; 

       labels[index].ForeColor = Color.Red; 

       labels[index].Location = new Point(0, y); 

       y = y + 10; 
       ++index; 
     } 

     // Add the Label control to the form. 
     SparePanel.Controls.AddRange(labels); 

在此先感謝

回答

2

標籤的默認大小太大,每個標籤的底部都覆蓋了它下面的標籤頂部。您應該添加這樣的事情:

labels[index].Size = new Size(50, 12); 
0

也許

Label[] labels = new Label[10]; 

需求是

Control[] labels = new Control[10]; 
+0

同樣的事情發生,如果我把它定義爲控制 – Greycrow 2010-01-10 22:34:17

0

據我所知,你需要實現IEnumerable接口和IEnumerate.Compare( )方法,以便遍歷Employee對象的foreach循環。

public class Employee : IEnumerator 
{ 

//Implement IEnumerate method here 


} 

我不是那麼有經驗,所以不要說我的話!我會把更詳細的代碼,但我沒有把它交給。

+0

我把foreach循環出來,只是測試一個簡單的例子。 我得到同樣的問題,只有一個出現。 for(int i = 1; i <10; i ++) {[index] = new Label(); labels [index] .Text =「Test」; labels [index] .ForeColor = Color.Red; labels [index] .Location = new Point(0,y); y = y + 10; ++指數; } – Greycrow 2010-01-10 22:51:23

+0

MSDN說下面可能還有適用於您: 給繼承: 在派生類中重寫的AddRange,一定要調用基類的的AddRange方法,以確保控件添加到集合。 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection.addrange.aspx – Alex 2010-01-10 23:28:49

0

另一種可能性(你也在尋找)是直接繪製琴絃上的用戶界面,而不添加控件。在面板的繪畫事件中進行。

private void SparePanel_Paint(object sender, PaintEventArgs e) 
{ 
    using (SolidBrush empBrush = new SolidBrush(Color.Red)) 
    { 
     int y = 0; 
     foreach (Employee employee in EmployeeList) 
     { 
     e.Graphics.DrawString(employee.Name, ((Panel)sender).Font, empBrush, 0, y); 
     y += 10; 
     } 
    } 
}