4

在我的 TableLayoutPanel 中,我动态添加了十二行(和几列)。当我将 TableLayoutPanel 的 Rows 集合设置为 Autosize 时,将生成第 12 行,但不会显示。我将其更改为百分比,每行获得 8.33%(我实际上将其设置为 8,它自动更改为 8.33)。

所以这对肉眼来说应该是完美的(99.99999999%),但是现在第十二行比其他行有更多的空间,第 16 列也一样,所以 TableLayoutPanel 在底部和右侧有“死区”,标签我在最后一行中的文本框与我在相邻列中的文本框不对齐。

如果有人有兴趣查看实际代码:

private void AddControlsToPlatypusTableLayoutPanel()
{
    string lblName;
    string txtbxName;
    int ColNum = 0;
    int RowNum = 0;
    int LoopCounter = 1;
    DateTime dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);

    while (LoopCounter <= 96) {
        // Create the Label
        lblName = string.Format("label{0}", LoopCounter);
        var lbl = new Label() {
            Name = lblName,
            Dock = DockStyle.Fill,
            Margin = new Padding(),
            TextAlign = ContentAlignment.MiddleCenter,
            Text = dt.ToString("HH:mm")
        };
        tableLayoutPanelPlatypus.Controls.Add(lbl, ColNum, RowNum);

        // Create the TextBox
        txtbxName = string.Format("textBox{0}", LoopCounter);
        var txtbx = new TextBox() {
            Name = txtbxName, Dock = DockStyle.Fill, Margin = new Padding()
        };
        tableLayoutPanelPlatypus.Controls.Add(txtbx, ColNum + 1, RowNum);

        dt = dt.AddMinutes(15);
        RowNum++;
        LoopCounter++;
        // Move over if at the bottom
        if (RowNum == 12) { 
            ColNum = ColNum + 2;
            RowNum = 0;
        }
    }
}

更新

通过稍微调整大小和位置,我可以让它看起来不错,但现在我要么不得不在它周围放置一个垫子,要么改变表单和所有其他控件的大小,或者其中许多控件,无论如何。所以我仍然认为百分比没有像人们期望的那样计算出来有点不正常。我知道,我知道:WPF。但这不是目前的选择。

4

1 回答 1

1

如果您已将其设置为 8,则 8*12 以 84% 结束,剩余 16% 将容纳在最后一行,同样的情况也适用于最后一列。因此,您需要将其定义为 100/12 = 8.33%。如果您将每一行设为 8.33%,将最后一行设为 8.37%,这将看起来不错。您需要在行或列的两种情况下完成 100%。或者您可以改用固定大小。如果您想要可变大小的表格,请确保您没有定义表格的大小,并且行高和列宽动态定义表格大小。

于 2012-09-05T18:17:55.727 回答