繁体   English   中英

用户控件在运行时未添加到 TableLayoutPanel

[英]User Control not Adding to TableLayoutPanel at Runtime

我在一个有 8 列和 8 行的表单上有一个 TableLayoutPanel。 我正在尝试从每个包含三个标签的用户控件列表中填充此表。 当我运行该应用程序时,我可以看到它已被填充,但查看实际表单,它是空的。

我试过用 label 替换控件,它们显示得很好,只是当我尝试使用用户控件时它不起作用。

此代码在 Load 方法中运行并生成GridSquareModel列表,用于填充用户控件。 每个 model 都有一个 X 和 Y position,它们与表格面板上的单元格相关。

var startup = new StartupForm();
if (startup.ShowDialog() == DialogResult.OK)
{
    var grid = new List<GridSquareModel>();
    for (int i = 0; i < 64; i++)
    {
        Position pos = new Position();
        pos.X = i % 8;
        pos.Y = i / 8;
        grid.Add(new GridSquareModel(pos));
    }

    RenderGrid(grid);
}
else
{
    Application.Exit();
}

此方法为列表中的每个GridSquareModel生成一个GridSquareControl position 中的 X 和 Y 值确定将它们添加到哪个单元格。

private void RenderGrid(List<GridSquareModel> grid)
{
    UIGrid.Clear();
    GridTable.Controls.Clear();

    foreach (var item in grid)
    {
        var control = new GridSquareControl(item)
        {
            Dock = DockStyle.Fill
        };
        GridTable.Controls.Add(control, item.Position.X, item.Position.Y);
        //GridTable.Controls.Add(new Label
        //{
        //    Text = "TEST"
        //}, item.Position.X + 1, item.Position.Y + 1);
    }

}

我已经评论了我用Label替换GridSquareModel的尝试,该尝试有效。 这应该会生成一个包含 64 个控件的表格,但是一旦加载,表格就会显示为空。

我是个白痴。 我为GridSquareControl创建了一个构造函数,但它不包含InitializeComponent方法,因此显然它没有被渲染。 现在一切都按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM