如何通过代码将元素添加到Windows窗体?

时间:2015-11-15 21:47:50

标签: c# winforms c#-4.0

问题就是这样,我想在现有的Windows窗体中添加一个TableLayoutPanel,我试过这个:

public class Level {

    public TableLayoutPanel brickGrid;

    public Level(Form parent, int width, int height, int left, int top, int rows, int columns) {
        brickGrid = new TableLayoutPanel();

        //Code

        brickGrid.CellBorderStyle = TableLayoutPanelCellBorderStyle.InsetDouble;

        //Code

        brickGrid.SetAutoScrollMargin(2, 2);

        brickGrid.BringToFront();

        parent.Controls.Add(brickGrid);
    }
}

但它似乎不起作用:/

编辑: 它没有抛出任何崩溃,错误,异常或类似情况,网格只是不会出现。

这是输出的图像: http://prntscr.com/9385e9

以下是完整的代码:

namespace PingPong.Source {

public class Level {

    public TableLayoutPanel brickGrid;

    public Level(Form parent, int width, int height, int left, int top, int rows, int columns) {
        brickGrid = new TableLayoutPanel();

        brickGrid.Width = width;
        brickGrid.Height = height;

        brickGrid.Left = left;
        brickGrid.Top = top;

        brickGrid.CellBorderStyle = TableLayoutPanelCellBorderStyle.InsetDouble;

        int originalRowCount = brickGrid.RowCount;
        int originalColumnCount = brickGrid.ColumnCount;

        float columnPercentage = 100f * columns / width;
        float rowPercentage = 100f * rows / height;

        int index = 0;
        while (index <= columns) {
            brickGrid.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, columnPercentage));
            index++;
        }

        index = 0;
        while (index <= rows) {
            brickGrid.RowStyles.Add(new RowStyle(SizeType.Percent, rowPercentage));
            index++;
        }

        index = 0;
        while (index < originalRowCount) {
            brickGrid.RowStyles.RemoveAt(originalRowCount - index + 1);
            index++;
        }

        index = 0;
        while (index < originalColumnCount) {
            brickGrid.ColumnStyles.RemoveAt(originalColumnCount - index + 1);
            index++;
        }

        brickGrid.SetAutoScrollMargin(2, 2);

        brickGrid.BringToFront();

        parent.Controls.Add(brickGrid);

        brickGrid.BackColor = System.Drawing.Color.Black;
    }
}
}

2 个答案:

答案 0 :(得分:1)

你确定这不起作用,而你却看不到它吗?我设置了一个名为frmMain的表单,其中包含一个名为Panel的{​​{1}}。下面的代码,我只是调整设置背景颜色,向我显示了带有红色背景的panel1控件。

backGrid

也许您只需要设置背景颜色以查看它是否有效并可能逐步完成代码以确保。

答案 1 :(得分:0)

好的,我知道这里出了什么问题,感谢@Brian Payne。问题是当我不得不将它添加到主要的Panel时,我将网格添加到Form的控件中。谢谢大家^^