将行添加到 TableLayoutPanel 的顶部
Adding rows to top of TableLayoutPanel
我正在尝试将新行添加到我的表格布局面板的顶部。为此,我使用以下代码:
初始化
TableLayoutPanel panel = new TableLayoutPanel();
panel.ColumnCount = 1;
panel.RowCount = 1;
panel.AutoScroll = true;
panel.Location = new System.Drawing.Point(280, 52);
panel.Size = new System.Drawing.Size(308, 189);
panel.Visible = true;
panel.BackColor = Color.DarkGray;
Controls.Add(panel);
对于每个新行
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16F));
panel.Controls.Add(new Label() { Text = text, AutoSize = false, ForeColor = Color.White, Font = font }, 0, 0);
panel.RowCount = panel.RowCount + 1;
问题
在我添加 4 行之前它似乎工作正常。例如:
迭代 1 -->
玩家 1
迭代 2 -->
玩家 2
玩家 1
迭代 3 -->
玩家 3
玩家 2
玩家 1
迭代 4 -->
玩家 4
玩家 3
玩家 2
玩家 1
问题来了
迭代 5 -->
玩家 4
玩家 5
玩家 3
玩家 2
玩家 1
你知道会发生什么吗?
添加行后,您需要将所有控件向下推一行,然后插入新控件:
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16F));
panel.RowCount++;
foreach (Control c in panel.Controls) {
panel.SetRow(c, panel.GetRow(c) + 1);
}
panel.Controls.Add(new Label() { Text = text }, 0, 0);
我正在尝试将新行添加到我的表格布局面板的顶部。为此,我使用以下代码:
初始化
TableLayoutPanel panel = new TableLayoutPanel();
panel.ColumnCount = 1;
panel.RowCount = 1;
panel.AutoScroll = true;
panel.Location = new System.Drawing.Point(280, 52);
panel.Size = new System.Drawing.Size(308, 189);
panel.Visible = true;
panel.BackColor = Color.DarkGray;
Controls.Add(panel);
对于每个新行
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16F));
panel.Controls.Add(new Label() { Text = text, AutoSize = false, ForeColor = Color.White, Font = font }, 0, 0);
panel.RowCount = panel.RowCount + 1;
问题 在我添加 4 行之前它似乎工作正常。例如:
迭代 1 --> 玩家 1
迭代 2 --> 玩家 2 玩家 1
迭代 3 --> 玩家 3 玩家 2 玩家 1
迭代 4 --> 玩家 4 玩家 3 玩家 2 玩家 1
问题来了
迭代 5 --> 玩家 4 玩家 5 玩家 3 玩家 2 玩家 1
你知道会发生什么吗?
添加行后,您需要将所有控件向下推一行,然后插入新控件:
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 16F));
panel.RowCount++;
foreach (Control c in panel.Controls) {
panel.SetRow(c, panel.GetRow(c) + 1);
}
panel.Controls.Add(new Label() { Text = text }, 0, 0);