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

セルの境界線を自分でペイントしたほうがよいでしょう。次の行に沿って何かをカスタマイズしてから、次のようにします。

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);
}

設計時: 設計時

実行時: 実行時

于 2012-09-24T14:33:20.800 に答える
2

TableLayOutPanel 自体は、CellBorderStyle 以外の境界線のプロパティをサポートしていませんが、これは必要なものではありません。

TableLayOutPanel を Panel コントロールに配置し、TableLayOutPanel の Dock プロパティを Fill に設定することをお勧めします。

次に、パネルの BorderStyle を必要なもの (FixedSingle または Fixed3D) に設定します。

于 2014-11-05T13:01:17.970 に答える
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 に答える