我已经和它斗争了一段时间,并且发现许多其他人也在使用TableLayoutPanel(.net 2.0 Winforms).
问题
我试图采用一个'空白'tablelayoutpanel,它定义了10列,然后在运行时以编程方式添加控件行(即每个单元一个控件).
人们可能认为它应该如此简单
myTableLayoutPanel.Controls.Add(myControl, 0 /* Column Index */, 0 /* Row index */);
Run Code Online (Sandbox Code Playgroud)
但是(对我来说)不添加行.所以也许可以添加一行样式
myTableLayoutPanel.RowStyles.Clear();
myTableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.我已经挖掘并发现myTableLayoutPanel.RowCount使用情况从设计时间变为运行时间,因此myTableLayoutPanel.RowCount++;实际上并没有添加另一行,甚至在添加RowStyle条目之前/之后!
我遇到的另一个相关问题是控件将被添加到显示器,但它们都只是在TableLayoutPanel的点0,0处渲染,另外它们甚至不被限制在它们应该是的Cell边界内.显示在内(即使用Dock = DockStyle.Fill它们仍然显得太大/太小).
有人有一个在运行时添加行和控件的工作示例吗?

我想在c#中的Windows窗体中的TableLayoutPanel中逐行动态添加这些条目
我怎样才能做到这一点?
我有一个TableLayoutPanel,以两列和0行开头.我需要做的是,动态添加一行并用不同的控件填充两列(它将是面板).在Form1中,我以这种方式创建TableLayout:
TableLayoutPanel Table = new TableLayoutPanel();
Table.Location = new Point(10, 40);
Table.Size = new Size(620,100);
Table.AutoSize = true;
Table.Name = "Desk";
Table.ColumnCount = 2;
Table.RowCount = 0;
Table.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
Table.GrowStyle = System.Windows.Forms.TableLayoutPanelGrowStyle.AddRows;
this.Controls.Add(Table);
Run Code Online (Sandbox Code Playgroud)
之后在运行时我会得到我需要多少行,如果它们将填充Panel或某些Label.可能会发生在同一行中,将是Panel,right Label等.
我以编程方式创建了一个继承自TableLayoutPanel类的类Map.Map类添加每个都有背景图像的Tile对象(Panel的子对象).一切都有效,除了我想删除的每个单元格之间有明显的空间.
我环顾四周,但无法弄清楚如何删除TableLayoutPanel中单元格之间的空间.删除它的最简单方法是什么?
给定一个包含2列和多行的表布局面板,如何将滚动条附加到它上面,因为它有时会比表单的大小增长得多.
谢谢
我有两行两列.我希望两个单元格的最后一列合并为一列.由于要求我不使用其他设计选项意味着两个tablelayout,其中第一个表布局有两行.我在C#中使用Winforms.
| | |
| | |
| | |
|_______________________| |
| | |
| | |
| | |
Run Code Online (Sandbox Code Playgroud) 我正在使用TableLayoutPanel控件,在我的场景中,我必须在一个特定单元格中放置两个控件,这可能吗?如果是这样,请详细说明.
我有TableLayoutPanel,我以编程方式添加Rows.用户基本上选择了一个属性,然后将其与一些控件一起显示在表中.我想我在这里有一个普遍的理解问题,我会尝试解释它.
每行中的一个控件是"删除"按钮.该按钮应该删除它所在的行.我所做的是向按钮添加一个事件处理程序并设置当前的rowcount.
deleteTalent.Click += (sender, e) => buttonClickHandler(numberOfRows);
Run Code Online (Sandbox Code Playgroud)
处理程序代码:
private void buttonClickHandler(int rowCount)
{
int count = rowCount - 1;
for (int i = count; i < (count + 5); i++)
{
balanceTable.Controls.RemoveAt(count);
}
balanceTable.RowStyles.RemoveAt(count);
balanceTable.RowCount--;
}
Run Code Online (Sandbox Code Playgroud)
我看了好几个小时,玩了一下.但我找不到一个干净利落的解决方案.我也是C#的新手
这是创建新行的完整函数:
private void addBalanceItems(ToolStripMenuItem item)
{
int numberOfRows = balanceTable.RowCount;
if (numberOfRows > 1)
{
balanceTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.AutoSize));
}
balanceTable.Height = numberOfRows * 45;
Steigerungsrechner rechner = new Steigerungsrechner();
string tag = item.Tag.ToString();
//change that asap :(
if (tag == "A") { rechner.column …Run Code Online (Sandbox Code Playgroud) 我使用的tableLayoutPanel是由两行组成的.在第一行我想要两列,在第二行我只需要一列.我怎样才能做到这一点?
不要问为什么,但我要求在a中的某些单元格周围绘制边框TableLayoutPanel.
例如,为简单起见,假设我有1行,5列TableLayoutPanel.每个单元格中都有一个按钮.我想在前3个单元格周围绘制一个框,然后在最后2个单元格周围绘制另一个框.总共有两个盒子.
有关如何实现这一目标的任何建议?
谢谢.
c# ×10
tablelayoutpanel ×10
winforms ×6
.net ×5
c#-4.0 ×1
cellspacing ×1
columnspan ×1
merge ×1
runtime ×1
scrollbar ×1