10

例如,如果我有 3 行和 5 列,我正在使用 TableLayoutPanel。我只想为整个面板绘制外边框。默认情况下,面板提供 CellBorderStyle,它将所有侧边框添加到所有可用的单元格。有什么方法可以只设置外部边界吗?

我在下面提供了一个示例代码。

    TableLayoutPanel tblPanel = new TableLayoutPanel;
    tblPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
    Label lblName;
    TextBox txtName;
    Button btnAdd;
    int colCnt = 0;
    for(int rw =0; rw < 3; rw++)
    {
            lblName = new Label();
            lblName.Name = "mylabel" + rw.ToString();
            tblPanel.Controls.Add(lblName, colCnt, rw);
            colCnt++;

            txtName = new TextBox();
            txtName.Name = "mytext" + rw.ToString();
            tblPanel.Controls.Add(txtName, colCnt, rw);
            colCnt++;

            btnAdd = new Button();
            btnAdd.Name = "mybutton" + rw.ToString();
            tblPanel.Controls.Add(btnAdd, colCnt, rw);

            colCnt = 0;
    }
4

5 回答 5

8

TableLayoutPanel 实际上支持 BorderStyle 属性,这是您想要的。例如:

tableLayoutPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

https://msdn.microsoft.com/en-us/library/system.windows.forms.tablelayoutpanel.borderstyle(v=vs.110).aspx

它装饰有:

[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]

所以 Intellisense 不会向您展示它,但它已记录在案并且可以正常工作。我不知道为什么它不可浏览。

于 2015-05-03T21:48:27.780 回答
6

You'd be better off painting the cell border yourself. Something along the following lines, then customize:

public TableForm() {
    InitializeComponent();
    this.tableLayoutPanel.CellPaint += tableLayoutPanel_CellPaint;
}

private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e) {
    var topLeft = e.CellBounds.Location;
    var topRight = new Point(e.CellBounds.Right, e.CellBounds.Top);
    e.Graphics.DrawLine(Pens.Black, topLeft, topRight);
}

At design-time: At design-time

At runtime: At runtime

于 2012-09-24T14:33:20.800 回答
2

TableLayOutPanel 本身不支持边框属性,但 CellBorderStyle 不是您想要的。

我建议您将 TableLayOutPanel 放入 Panel 控件中,并将 TableLayOutPanel 的 Dock 属性设置为 Fill。

然后将 Panel 的 BorderStyle 设置为您想要的(FixedSingle 或 Fixed3D)

于 2014-11-05T13:01:17.970 回答
2

您可以通过将属性 CellBorderStyle 更改为 Single 或所需的选择来实现。

物业变更:

在此处输入图像描述

样本 :

在此处输入图像描述

于 2018-09-22T09:03:48.820 回答
0
public TestForm()
    {
        InitializeComponent();
        tableLayoutPanel.Paint += tableLayoutPanel_Paint;
    }

private void tableLayoutPanel_Paint(object sender, PaintEventArgs e){

       e.Graphics.DrawRectangle(new Pen(Color.Blue), e.ClipRectangle);

    }
于 2019-03-12T10:58:23.327 回答