TableLayoutPanel单元格边框问题

时间:2016-10-04 08:48:06

标签: c# .net tablelayoutpanel

我已将TableLayoutPanel放在Windows窗体上。 它有3列2行。 我已将TableLayoutPanel的CellBorderStyle属性设置为" Single"。 我想动态隐藏第二列。 为实现这一点,我写了以下代码:

tableLayoutPanel1.ColumnStyles[0].Width = 0;

但是TableLayoutPanel将如下所示。看到边框,边框变粗: enter image description here 任何人都可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您需要owner.draw TLP:

隐藏第3栏:enter image description here

这是一种方法:关闭CellBorder并对此事件进行编码

private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
    Rectangle r = e.CellBounds;
    using (Pen pen = new Pen(Color.DarkGoldenrod))
    {
        // top and left lines
        e.Graphics.DrawLine(pen, r.X, r.Y, r.X + r.Width, r.Y);
        e.Graphics.DrawLine(pen, r.X, r.Y, r.X, r.Y + r.Height);
        // last row? move hor.lines 1 up!
        int cy = e.Row == tableLayoutPanel1.RowCount - 1 ? -1 : 0;
        if (cy != 0) e.Graphics.DrawLine(pen, r.X, r.Y + r.Height + cy, 
                                r.X + r.Width, r.Y + r.Height + cy);
        // last column ? move vert. lines 1 left!
        int cx = e.Column == tableLayoutPanel1.ColumnCount - 1 ? -1 : 0;
        if (cx != 0) e.Graphics.DrawLine(pen, r.X + r.Width + cx, r.Y, 
                                r.X + r.Width + cx, r.Y + r.Height);
    }
}

但是你应该问问自己为什么会出现这种情况,如果用户不能真正看到有一个隐藏的列......