web-dev-qa-db-ja.com

tablelayoutpanelの一部のセルの周囲に境界線を描画します

理由は聞かないでください。ただし、TableLayoutPanelの特定のセルの周囲に境界線を引く必要があります。

たとえば、簡単にするために、1行5列のTableLayoutPanelがあるとします。各セルにはボタンがあります。最初の3つのセルの周りにボックスを描画し、次に最後の2つのセルの周りに別のボックスを描画したいと思います。つまり、合計2つのボックスです。

それを達成する方法について何か提案はありますか?

ありがとう。

18
Vance Smith

CellPaintイベントを使用して、必要に応じて境界線の長方形を描画できます。

tableLayoutPanel1.CellPaint += tableLayoutPanel1_CellPaint;

ハンドラー:

void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
    if (e.Column == 1 && e.Row == 0)
        e.Graphics.DrawRectangle(new Pen(Color.Blue), e.CellBounds);
}

ControlPaintを使用して、あらゆる種類の境界線を描画できます。

if (e.Column == 1 && e.Row == 0)
{
    var rectangle = e.CellBounds;
    rectangle.Inflate(-1, -1);

    ControlPaint.DrawBorder3D(e.Graphics, rectangle, Border3DStyle.Raised, Border3DSide.All); // 3D border
    ControlPaint.DrawBorder(e.Graphics, rectangle, Color.Red, ButtonBorderStyle.Dotted); // dotted border
}
28
Alex Aza

TableLayoutPanelのプロパティにアクセスし、CellBorderStyleをSingleに設定します

5
wamsow

描画はコーディングエラーPruneに加えて、コードの汚染です。 winformsのTableLayoutPanelがテーブルの"border"の非常に基本的なサポートを開始するまで、必要に応じて、内部に追加のテーブルがあるパネル(Dock:Fill)を使用することをお勧めします。

0
ilias iliadis