代码之家  ›  专栏  ›  技术社区  ›  brienna

仅在动态填充单元格时调整TableLayoutPanel行的大小

  •  0
  • brienna  · 技术社区  · 6 年前

    我有一个TableLayoutPanel, ug_degrees ,包含3列和1行。每个单元格动态填充另一个TableLayoutPanel, degreePanel ,包含1个标签和1个文本框。

    我需要让我的布局看起来像这样:

    enter image description here

    现在,我的布局如下所示:

    enter image description here

    我不明白为什么单元格之间有这么大的间隙,为什么行不能扩展以填充其内容(标签和文本框)。我尝试将整个TableLayoutPanel的autosize属性设置为true,但列的大小会调整,即使我只将行的sizetype设置为autosize也是如此。

    显示的表后面的属性是默认的。所有非默认属性都是在下面的C#中自定义的。

    // Dynamically load undergraduate degrees
    int row = 0;
    for (int i = 0; i < degrees.undergraduate.Count; i++) {
        // Create and populate panel for each degree
        TableLayoutPanel degreePanel = new TableLayoutPanel();
        degreePanel.ColumnCount = 1;
        degreePanel.RowCount = 2;
        degreePanel.AutoSize = true;
        foreach (RowStyle style in degreePanel.RowStyles) {
            style.SizeType = SizeType.AutoSize;
        }
        degreePanel.BorderStyle = BorderStyle.FixedSingle;
        //degreePanel.Margin = new Padding(0);
    
        Label degTitle = new Label();
        degTitle.Text = degrees.undergraduate[i].title;
        degTitle.Dock = DockStyle.Fill;
    
        TextBox degDesc = new TextBox();
        degDesc.ReadOnly = true;
        degDesc.Multiline = true;
        degDesc.Dock = DockStyle.Fill;
        degDesc.Text = degrees.undergraduate[i].description;
        SizeF size = degDesc.CreateGraphics()
                    .MeasureString(degDesc.Text,
                                    degDesc.Font,
                                    degDesc.Width,
                                    new StringFormat(0));
        degDesc.Height = (int)size.Height;
    
        degreePanel.Controls.Add(degTitle, 0, 0);
        degreePanel.Controls.Add(degDesc, 0, 1);
        ug_degrees.Controls.Add(degreePanel, i, row);
    
        // Resize rows and columns (only after adding controls)
        foreach (RowStyle style in ug_degrees.RowStyles) {
            style.SizeType = SizeType.AutoSize;
        }
    
        // Jump to next row if current row is full
        if ((i+1) % 3 == 0) {
            row++;
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Tim    6 年前

    添加 degreePanel.Dock = DockStyle.Fill