【问题标题】:Cannot remove spacing between controls in TableLayoutPanel?无法删除 TableLayoutPanel 中控件之间的间距?
【发布时间】:2016-11-04 09:54:56
【问题描述】:

我添加到TableLayoutPanel 的按钮之间有一些间距。我删除了 Button 中的边框,并在 Panel 中将 Margin 和 Padding 设置为 0。但我继续得到那个间距。

tableLayoutPanel.RowCount 设置为 8,Rows 集合我添加了 8 行 Size Type Absolute

我错过了什么吗?代码如下:

    private void FillSelectLayout()
    {
        tableLayoutPanelSelect.Controls.Clear();
        tableLayoutPanelSelect.RowStyles.Clear();

        tableLayoutPanelSelect.RowCount = 8;

        for (int i = 0; i < 8; i++)
        {
            Button buttonSelector = new Button();
            buttonSelector.Height = 64;
            buttonSelector.Width = 100;
            buttonSelector.FlatStyle = FlatStyle.Flat;
            buttonSelector.FlatAppearance.BorderSize = 0;
            buttonSelector.BackColor = Color.Yellow;
            tableLayoutPanelSelect.Controls.Add(buttonSelector, 0, i);
        }
    }

它的显示方式如下:

【问题讨论】:

  • 我看不到您在哪里设置 TLP、RowSizes、Margin、Padding..

标签: c# winforms visual-studio-2010 .net-4.0 tablelayoutpanel


【解决方案1】:

要删除单元格中按钮之间的空间,只需将它们的停靠属性设置为填充然后删除按钮的默认边距:

var b = new Button();
b.Dock = DockStyle.Fill;
b.Margin = new Padding(0);

注意:

  • 通常最好将单元格中托管的控件的Dock 属性设置为Fill。这样,您的控件将遵循您为列和行设置的 TableLayouPanel 大小调整规则。

  • TableLayoutPanel 使用控件的Margin 属性来设置控件在单元格中的位置。所以如果你不想设置Dock,而你更喜欢手动设置Size,那么只设置Margin就足够了。

【讨论】:

  • 我不需要设置Dock 属性,但Margin 零是关键。
  • @Crowcoder 通常最好将您在单元格中托管的控件的Dock 属性设置为Fill。这样,您的控件将遵循您为列和行设置的 TableLayouPanel 大小调整规则。
  • 我曾尝试将边距设置为 0,并按照建议将停靠样式设置为无用。我仍然看到差距
【解决方案2】:

我在TableLayoutPanel中使用不同的控件时遇到了同样的问题

你可以这样做

  1. 转到设计视图
  2. 点击属性
  3. 转到列,当您单击列旁边的文本框时,最右侧会出现一个按钮 (...),单击它
  4. 出现一个弹出窗口,选择 AutoSize(而不是 Absolute 或 Percentage)。
  5. Show: 的同一窗口中选择 Rows 并再次选择 Autosize。
  6. 点击确定就完成了。

【讨论】:

    【解决方案3】:

    我 .. 在面板中将 Margin 和 Padding 设置为 0。

    您为什么不删除 Buttons 中的 Margin 而不是:

    buttonSelector.Margin = new Padding(0);
    

    MSDN:

    Margin 属性定义了控件周围的空间 其他控件距控件边界指定距离。

    【讨论】: