Нарисуйте границы вокруг некоторых ячеек в таблице - PullRequest
18 голосов
/ 05 июня 2011

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

Например, для простоты, скажем, у меня есть 1 строка, 5 столбцов TableLayoutPanel.В каждой ячейке есть кнопка.Я хотел бы нарисовать рамку вокруг первых 3 ячеек, а затем еще одну рамку вокруг последних 2 ячеек.Итак, всего два поля.

Есть предложения о том, как этого добиться?

Спасибо.

Ответы [ 2 ]

28 голосов
/ 05 июня 2011

Вы можете использовать событие 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
}
4 голосов
/ 18 января 2017

Доступ к свойствам для tableLayoutPanel и установить для CellBorderStyle значение Single

...