这是一个循序渐进的例子:
创建一个 Form
把一个TableLayoutPanel
工具箱放在你的工具箱上Form
tableLayoutPanel1
在设计图面上选择,然后F4按键查看属性.
从属性网格的工具栏中,您可以选择显示"属性" 或"事件" .单击事件图标,然后从列表中双击CellPaint
事件以tableLayoutPanel1_CellPaint
在代码中创建事件处理程序.
您可以根据某些条件在此方法中绘制每个单元格背景.该事件将引发绘制每个单元格背景并且e.Row
是行索引,e.Column
是列索引并且e.CellBounds
是绘制单元格的绑定.
例如,在下面的示例中,我们绘制黑色背景,if ((e.Column + e.Row) % 2 == 1)
否则,我们绘制白色背景:
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e) { if ((e.Column + e.Row) % 2 == 1) e.Graphics.FillRectangle(Brushes.Black, e.CellBounds); else e.Graphics.FillRectangle(Brushes.White, e.CellBounds); }
动态更改颜色
要从另一个程序点更改颜色,例如在Click
按钮的情况下,您应该将每个单元格的颜色存储在二维数组中,并使用该颜色为该单元格创建画笔:
bgColors
在表单中定义:
Color[,] bgColors = new Color[2, 2] { { SystemColors.Control, SystemColors.Control }, { SystemColors.Control, SystemColors.Control } };
以这种方式绘制单元格的背景:
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e) { using (var b = new SolidBrush(bgColors[e.Column, e.Row])) { e.Graphics.FillRectangle(b , e.CellBounds); } }
要改变BackColor
的Cell
,您可以:
private void Button1_Click(object sender, EventArgs e) { //column: 0 ,row: 1 bgColors[0, 1] = Color.Red; tableLayoutPanel1.Refresh(); }
作为另一个简单的选项,您可以放入Panel
每个单元格,并设置to 的Dock
属性并将其属性设置为,然后每次要更改位置的面板颜色时,您可以使用此代码:Panel
Fill
Margin
0,0
(column, row)
this.tableLayoutPanel1.GetControlFromPosition(column, row).BackColor = Color.Red;