创建动态表格布局
Posted
技术标签:
【中文标题】创建动态表格布局【英文标题】:Creating a dynamic TableLayout 【发布时间】:2021-12-22 00:14:40 【问题描述】:我一直在努力创造约翰·康威的人生游戏。
因此我一直在考虑创建一个表格布局并向每个单元格添加按钮。
我已经根据我的需要正确地开始了列和行的布局,比如说 20x20。它是由设计师构建的。
此外,我创建了一个名为 Templates 的类,其中包含网格模式,这些网格模式是所需大小的二维 int 数组,其值为 - 0\1 *(这只是一个演示,我应该将数组类型更改为布尔值)
那我就用了下面的方法:
private void createButtons(TableLayoutPanel i_TableLayoutGameOfLife)
for (int i = 0; i < k_GameRows; ++i)
for (int j = 0; j < k_GameColumns; ++j)
if (templates.GridPattern1[i, j] == 1)
TableLayoutGameOfLife.SetCellPosition(new Button
Dock = DockStyle.Fill,
// += gameButtonClicked, //TODO: Implement
ForeColor = Color.White
, new TableLayoutPanelCellPosition(i,j));
// TableLayoutGameOfLife.GetControlFromPosition(i, j).Controls.Add(
以下运行没有异常,但是当我检查表中的控件数量时,我观察到它有 0 个(使用调试器)控件,这可能意味着没有控件被添加到表中(我推测)。
之后我一直尝试使用类似的方法更新每个位置的前景色,通过以下方法使值为 1 的单元格为黄色,值为 0 的单元格为白色:
private void updateColor(TableLayoutPanel i_TableLayoutGameOfLife)
for (int i = 0; i < k_GameRows; ++i)
for (int j = 0; j < k_GameColumns; ++j)
if (templates.GridPattern1[i, j] == 1)
TableLayoutGameOfLife.GetControlFromPosition(i, j).ForeColor = Color.Yellow;
else
TableLayoutGameOfLife.GetControlFromPosition(i, j).ForeColor = Color.White;
我添加了第二个问题,因为方法相似并且也可能存在错误。
可能是什么问题?有什么解决办法?
提前致谢, 丹
【问题讨论】:
【参考方案1】:我不建议通过“SetCellPosition”方法设置控件。
我宁愿通过控件和自定义添加方法添加按钮。 因此,您可以确保 TableLayout 知道有一个新的 Control 并且可以正确地重新呈现自己。
i_TableLayoutGameOfLife.Controls.Add(new Button
Dock = DockStyle.Fill,
// += gameButtonClicked, //TODO: Implement
ForeColor = Color.White
, i, j);
【讨论】:
以上是关于创建动态表格布局的主要内容,如果未能解决你的问题,请参考以下文章