Обратите внимание, что на самом деле не существует такой вещи, как TableLayoutPanelCell
. «Ячейки» строго виртуальны.
Вы можете использовать событие CellPaint
для рисования любого BackColor
в любой «ячейке», пустой или нет:
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (e.Row == e.Column)
using (SolidBrush brush = new SolidBrush(Color.AliceBlue))
e.Graphics.FillRectangle(brush, e.CellBounds);
else
using (SolidBrush brush = new SolidBrush(Color.FromArgb(123, 234, 0)))
e.Graphics.FillRectangle(brush, e.CellBounds);
}
Конечно, цвета и условия на ваше усмотрение.
Обновление: еще раз обратите внимание, что вы не можете раскрасить определенную «ячейку», потому что нет TableLayoutPanelCells
! Нет такого класса, ни элементов управления, ни даже объектов. Его просто не существует! TLP не состоит из "ячеек". Он состоит только из строк и столбцов.
Таким образом, чтобы покрасить «ячейку», вам нужно закодировать подходящее условие в событии CellPaint
, которое ближе всего к использованию имени «ячейка» в .NET.
Вы можете использовать простые формулы или явные перечисления для создания нужного цветового макета в зависимости от ваших потребностей.
Вот два более сложных примера:
Для простого макета шахматной доски используйте это условие:
if ((e.Row + e.Column) % 2 == 0)
Для макета произвольной формы соберите все значения цвета в Dictionary<Point>, Color
;
Dictionary<Point, Color> cellcolors = new Dictionary<Point, Color>();
cellcolors.Add(new Point(0, 1), Color.CadetBlue);
cellcolors.Add(new Point(2, 4), Color.Blue);
..
..
..
и написать:
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (cellcolors.Keys.Contains(new Point(e.Column, e.Row )))
using (SolidBrush brush = new SolidBrush(cellcolors[new Point(e.Column, e.Row )]))
e.Graphics.FillRectangle(brush, e.CellBounds);
else
using (SolidBrush brush = new SolidBrush(defaultColor))
e.Graphics.FillRectangle(brush, e.CellBounds);
}
person
TaW
schedule
03.08.2016