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.
精彩评论