Добавить строки в TableLayoutPanel по заданному индексу - PullRequest
0 голосов
/ 08 января 2019

У меня есть TableLayoutPanel и добавление строк динамически. Как я могу вставить строки с элементами управления по определенному индексу?

private void AddRowstoTableLayout()
{
  for (int cnt = 0; cnt < 5; cnt++)
  {
    RowStyle newRowStyle = new RowStyle();
    newRowStyle.Height = 50;
    newRowStyle.SizeType = SizeType.Absolute;

    Label lbl1 = new Label();
    lbl1.Text = "label-" + (cnt + 1);

    TextBox t1 = new TextBox();
    t1.Text = "text-" + (cnt + 1);

    Label lblMove = new Label();
    lblMove.Text = "Move-" + (cnt + 1);
    lblMove.MouseDown += new MouseEventHandler(dy_MouseDown);

    tableLayoutPanel1.RowStyles.Insert(0, newRowStyle);
    this.tableLayoutPanel1.Controls.Add(lbl1, 0, cnt); //correct

    this.tableLayoutPanel1.Controls.Add(t1, 1, cnt); //correct
    this.tableLayoutPanel1.Controls.Add(lblMove, 2, cnt); //correct
    tableLayoutPanel1.RowCount += 1;
  }
}

Я пытался

tableLayoutPanel1.RowStyles.Insert(0, newRowStyle);

но не повезло

1 Ответ

0 голосов
/ 08 января 2019

Нет такой функции из коробки. Способ состоит в том, чтобы добавить строку к вашей TableLayoutPanel. Затем переместите все элементы управления, которые расположены в строках, больше равных требуемому индексу строки, на индекс строки выше их текущей позиции. Вот как вы можете это сделать:

void InsertTableLayoutPanelRow(int index)
{
    RowStyle newRowStyle = new RowStyle();
    newRowStyle.Height = 50;
    newRowStyle.SizeType = SizeType.Absolute;

    tableLayoutPanel1.RowStyles.Insert(index, newRowStyle);
    tableLayoutPanel1.RowCount++;
    foreach (Control control in tableLayoutPanel1.Controls)
    {
        if (tableLayoutPanel1.GetRow(control) >= index)
        {
            tableLayoutPanel1.SetRow(control, tableLayoutPanel1.GetRow(control) + 1);
        }
    }

}
...