19

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.

BeYourOwnGod
  • 2,345
  • 7
  • 30
  • 35

3 Answers3

31

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
}
Alex Aza
  • 76,499
  • 26
  • 155
  • 134
  • 2
    Can I be able to use it bounded to a method? For example, I will define a method like PaintDesiredCell(int columnOrder, int rowOrder) {//codes}? Is it possible? – Sertan Pekel Oct 31 '13 at 12:50
  • 1
    I like to use this when debugging. Using dot Net with IronPython, I don't have a GUI builder, so being able to see the grid helps a lot when trying to find errors. I use a debug switch to determine if I hookup the cell paint event handler. – Bill Kidd Nov 19 '14 at 11:38
3

Access properties for the tableLayoutPanel and Set the CellBorderStyle to Single

wamsow
  • 105
  • 2
  • 2
  • Question is about individual cells or group of cells, not for [all cells](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.tablelayoutpanel.cellborderstyle?view=netframework-4.8) – ilias iliadis Dec 29 '19 at 22:09
1

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.

ilias iliadis
  • 601
  • 8
  • 15