在tablelayoutpanel中的某些单元格周围绘制边框

时间:2011-06-04 20:25:22

标签: c# .net winforms tablelayoutpanel

不要问为什么,但我要求在TableLayoutPanel中的某些单元格周围绘制边框。

例如,为简单起见,假设我有1行,5列TableLayoutPanel。每个单元格中都有一个按钮。我想在前3个单元格周围绘制一个框,然后在最后2个单元格周围绘制另一个框。总共有两个盒子。

有关如何实现这一目标的任何建议吗?

感谢。

3 个答案:

答案 0 :(得分:28)

您可以使用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
}

答案 1 :(得分:4)

访问tableLayoutPanel的属性并将CellBorderStyle设置为Single

答案 2 :(得分:0)

绘图是编码错误修剪,加上代码污染。 在Winforms中的TableLayoutPanel开始支持表中«border»的基本知识之前,如果需要,最好使用内部带有额外表的面板(Dock:Fill)。