开发者

Draw borders around some cells in a tablelayoutpanel

开发者 https://www.devze.com 2023-03-11 13:53 出处:网络
Don\'t ask why开发者_如何学编程 but I have the requirement to draw a border around certain cells in a TableLayoutPanel.

Don't ask why开发者_如何学编程 but I have the requirement to draw a border around certain cells in a TableLayoutPanel.

For example, for simplicity, lets say I have a 1 row, 5 column TableLayoutPanel. Each cell has a button in it. I would like to draw a box around the first 3 cells and then another box around the last 2 cells. So two boxes total.

Any suggestions on how to accomplish that?

Thanks.


You could use CellPaint event and draw the border rectangle when needed:

tableLayoutPanel1.CellPaint += tableLayoutPanel1_CellPaint;

The handler:

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

You can draw any kind of border using 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
}


Access properties for the tableLayoutPanel and Set the CellBorderStyle to Single


Drawing is coding error prune, plus code polluting. Until TableLayoutPanel in winforms starts supporting the very basics of «border» in table, better use a panel (Dock:Fill) with an extra table inside, if needed.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号