Проблема с границей ячейки TableLayoutPanel

#c# #.net #tablelayoutpanel

#c# #.net #tablelayoutpanel

Вопрос:

Я TableLayoutPanel разместил форму Windows. В нем 3 столбца и 2 строки. Я установил для свойства CellBorderStyle TableLayoutPanel значение «Single». Я хочу динамически скрыть второй столбец. Для достижения этого я должен написать следующий код:

 tableLayoutPanel1.ColumnStyles[0].Width = 0;
  

Но тогда TableLayoutPanel будет выглядеть так, как показано ниже.Посмотрите на границу, граница становится толстой:
введите описание изображения здесь
Кто-нибудь может решить эту проблему?

Ответ №1:

Вам понадобится владелец.нарисуйте TLP:

Скрытие 3-го столбца:введите описание изображения здесь

Это способ: отключить 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);
    }
}
  

Но вам лучше спросить себя, почему возникла такая ситуация, и если пользователь не должен, возможно, на самом деле видеть, что столбец скрыт..