2013-06-14 4 views
1

Моя проблема заключается в следующем:Элементы управления странно отображаются при зацикливании;

Image

Эти метки создаются там через цикл, и я думаю, что вы получили то, что моя проблема в том, что странное перекрытием.

Код:

for (int i = 0; i < maxlabels ; i++) 
{     
    Label x = new Label(); 
    x.Name = string.Format("label{0}", i); 
    x.Top = 2 + (15 * i); // <---- changed this line 
    x.Left = 3; 
    x.Text = x.Name; 
    x.BringToFront(); 
    x.BackColor = Color.Transparent; 
    panel1.Controls.Add(x);     
} 

В приведенном выше коде, когда изменился

x.Top = 2 + (30 * i); 

в

(15 * i); 

я получил результат:

Image

+0

Pannel, пожалуй, не большой, чтобы прийти отобразить все ярлыки? –

+0

Изменение высоты. x.Height = 15; – Smartis

ответ

1

Поскольку вы явно не устанавливаете высоту на этикетке, это wull использует значение по умолчанию.

Вы могли бы решить эту проблему, установив x.AutoSize = true; и используя этикетки Высота в умножителе

for (int i = 0; i < maxlabels ; i++) 
{     
    Label x = new Label(); 
    x.Name = string.Format("label{0}", i); 
    x.AutoSize = true;` 
    x.Top = 2 + (x.Height * i); 
    x.Left = 3; 
    x.Text = x.Name; 
    x.BringToFront(); 
    x.BackColor = Color.Transparent; 
    panel1.Controls.Add(x);     
} 
+0

Спасибо :) простое решение :) – faztp12

2

Я предлагаю вам использовать FlowLayoutPanel. И установить направление сверху вниз (вы можете сделать это в свойстве UI также):

yourFlowLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; 

Вам не нужно устанавливать сверху, слева и т.д. в этой панели: например

for (int i = 0; i < maxlabels ; i++) 
{     
     Label x = new Label(); 
     x.Name = string.Format("label{0}", i); 
     x.Text = x.Name; 
     x.BackColor = Color.Transparent; 
     yourFlowLayoutPanel.Controls.Add(x);     
} 
+0

да что решает, спасибо :) – faztp12

Смежные вопросы