TableLayoutPanel 控件添加问题

3

我有一个包含2列4行的TableLayoutPanel,我想在运行时向其中添加按钮。我希望每个按钮都能动态地添加到第一格中:

private int nextIndex = 1;

private void bAddButton_Click(object sender, EventArgs e)
{
    Button newButton = new Button();
    newButton.Text = nextIndex.ToString();
    tableLayoutPanel1.Controls.Add(newButton, 0, 0);  // first cell
    nextIndex++;
}

据我理解,这应该将所有现有的按钮向上移动一个单元格。这似乎在前三次操作中是有效的,但之后它会将新按钮插入到第2个单元格几次,然后是第3个单元格,然后是第4个单元格等等...
对于给定的单元格,您可以调用Controls.Add(ctrl, column, row)的次数是否有限制?
我有点困惑,我做错了什么?

你只想要按钮添加到第一个单元格吗? - Matt Breckon
1
我没有答案,但我确实看到了相同的行为。在一个3x3的面板上,我最终得到了7、6、9,然后是8、5、2和1、4、3。即使MS文档似乎没有提到移动现有值,但它确实说添加的控件将放置在给定的位置。所以至少我应该在单元格0,0中得到9。 - comecme
1
更奇怪的是事物如何变化。三次点击后,你有3 2 1。第四个按钮插入到3之后,所以你得到3 4 2 1。但在第五次点击时,5被插入到4之后,但4也移动到第一位置,1和2也交换位置!非常奇怪!所以321;3421;45312;456123;5674123。我看不出其中的逻辑。 - comecme
2个回答

3
我刚遇到了同样的问题!帮助我的方法是:
  1. 在表单的设计视图中,点击你的表格

  2. 将AutoScroll和AutoSize设置为True

  3. 进入编辑行和列

  4. 点击第一行(也可能是唯一的一行),将其大小类型设置为AutoSize

所有新行的大小类型也将被设置为AutoSize。由于这个设置,我的行可以正确地定位和调整大小。


谢谢!你也帮了我大忙! - Ehud Grand
我没有遇到 OP 的问题,但这解决了我的问题,即当 Windows 窗体大小被拖动时,我在 TableLayoutPanel 中放置的 DataGridView 自动调整大小。不知何故,当拖动窗口边框时,Datagridview 不会自动调整大小,而保持其静态大小。这真的解决了它。谢谢。 - WhySoSerious

0
要在单个单元格中添加多个按钮,您需要将面板添加为单元格中唯一的控件,然后将您的按钮添加到该面板中。

嗨,马特,感谢您的快速回复,抱歉我可能没有表达清楚,我只想每个单元格有一个按钮,但我想将新按钮添加到第一个单元格,使所有现有按钮向右移动一个单元格。我的代码在前三次运行时确实有效,但之后相同的代码会插入错误的单元格。 - TimD
嗯,我明白你的意思,它确实做了一些相当奇怪的事情,不是吗? - Matt Breckon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接