Добавление массива меток на панель - PullRequest
1 голос
/ 11 января 2010

Я пытаюсь добавить массив меток на панель в моей форме. Я выбрал метку, потому что я мог установить цвета для текста. Если есть лучший способ, пожалуйста, дайте мне знать.

Код ниже работает нормально, но будет отображаться только одна метка. Я установил точку останова и посмотрел на массив перед добавлением и все элементы есть.

Однако на панели отображается только одна метка.

Вот код.

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

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 11 января 2010

Размер этикетки по умолчанию слишком велик, и нижняя часть каждой этикетки закрывает верх этикетки под ней Вы должны добавить что-то вроде этого:

labels[index].Size = new Size(50, 12);
0 голосов
/ 11 января 2010

Другая возможность (которую вы также искали) - рисовать строки непосредственно в интерфейсе без добавления элементов управления. Сделайте это во время рисования панели.

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;
      }
   }
}
0 голосов
/ 11 января 2010

Насколько я знаю, вам также необходимо реализовать интерфейс IEnumerable и метод IEnumerate.Compare (), чтобы выполнить цикл foreach над объектом Employee.

public class Employee : IEnumerator
{

//Implement IEnumerate method here


}

Хотя я не настолько опытен, так что не верьте мне на слово! Я бы поставил более подробный код, но у меня его нет под рукой.

0 голосов
/ 11 января 2010

возможно

    Label[] labels = new Label[10];

должно быть

    Control[] labels = new Control[10];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...