TableLayoutPanel показывает только последнюю строку - C #

У меня TableLayoutPanel с 10 строками и 2 столбцами.

Моя проблема в том, что когда я добавляю метку в первый столбец и кнопку в другой, все в порядке. Но когда я добавляю еще один ярлык и кнопку, например, следующая строка, предыдущие строки пусты. Кажется, моя программа показывает только последнюю добавленную строку.

Код:

Label lblProjectName = new Label();
lblProjectName.Text = "test";
lblProjectName.Anchor = AnchorStyles.Left;
Button btnProject = new Button();
btnProject.Text = "Fill In";

tlpProject.Controls.Add(lblProjectName, 0, 0);
tlpProject.Controls.Add(btnProject, 1, 0);

tlpProject.Controls.Add(lblProjectName, 0, 1);
tlpProject.Controls.Add(btnProject, 1, 1);

Tnx!


person StevenVerheyen    schedule 18.02.2013    source источник
comment
Пожалуйста, обновите заголовок, указав конкретную проблему.   -  person Soner Gönül    schedule 19.02.2013


Ответы (2)


Вам необходимо создать новый элемент управления для каждой ячейки на панели.

В настоящее время ваш код перемещает элементы управления в последний столбец и последнюю строку.

Что-то вроде этого:

for (int i = 0; i < numRows; ++i) {
  Button btnProject = new Button();
  btnProject.Text = "Fill In";
  tlpProject.Controls.Add(btnProject, 1, i);
}

Здесь также должны быть добавлены любые обработчики событий, где на конце обработчика вы должны проверить «отправителя» объекта, чтобы увидеть, какую кнопку нажал пользователь.

person LarsTech    schedule 18.02.2013
comment
Ох, хорошо. Никогда не думал об этом! Спасибо :) - person StevenVerheyen; 19.02.2013

Кажется, что Label и Button могут быть дочерними элементами только одного элемента управления, пока вы добавляете их в разные ячейки (следовательно, разные элементы управления). Если вам нужно, чтобы все ячейки были заполнены ярлыками и кнопками, вам понадобится 10 ярлыков и 10 кнопок для каждого столбца. Посмотрите на код:

for(int i=0;i<10;i++){
var lblProjectName = new Lable();
lblProjectName.Text = "test";
lblProjectName.Anchor = AnchorStyles.Left;
var btnProject = new Button();
btnProject.Text = "Fill In";

tlpProject.Controls.Add(lblProjectName, 0, i);
tlpProject.Controls.Add(btnProject, 1, i);
}
person Blablablaster    schedule 18.02.2013