创建动态表格布局

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);

【讨论】:

以上是关于创建动态表格布局的主要内容,如果未能解决你的问题,请参考以下文章

如何为具有动态高度的表格单元格正确设置自动布局?

iOS 如何使用两个固定部分和一个动态表格视图进行布局?

取决于屏幕尺寸的动态表格布局...>

使用自动布局约束动态调整表格视图单元格的大小

IOS - 如何使用自动布局有一个可滚动的表格视图标题

Android动态生成表格