更新时间:2023-12-06 10:24:28
动态更改颜色
从程序的另一点更改颜色,例如按钮的 Click
事件,您应该将每个单元格的颜色存储在二维数组中,并使用该颜色为该单元格创建画笔:
在您的表单中定义 bgColors
:
Color [,] bgColors = new Color [2,2] {
{SystemColors.Control,SystemColors.Control},
{SystemColors.Control,SystemColors.Control}
} ;
以此方式绘制单元格背景:
私有无效tableLayoutPanel1_CellPaint(对象发送者,TableLayoutCellPaintEventArgs e)
{
使用(var b = new SolidBrush(bgColors [e.Column,e.Row]))
{
e.Graphics.FillRectangle(b,e.CellBounds);
}
}
更改 BackColor
的单元格
,您可以:
私有void Button1_Click(object sender,EventArgs e)
{
//列:0,行:1
bgColors [0,1] = Color.Red;
tableLayoutPanel1.Refresh();
}
作为另一个简单的选择,您可以在每个单元格中放置 Panel
并设置 Panel 的c> Dock 停靠到 Fill
并设置其保证金
属性设置为 0,0
,然后每次您要更改位置的面板颜色(列,行)
可以使用以下代码:
this.tableLayoutPanel1.GetControlFromPosition(column,row).BackColor =颜色。红色;
I need to write a function which will set the color in TableLayoutPanel
cells depending on some condition during running the program.
TableLayoutPanel
is divided by 16x16. There is some condition at the start of the program. If the condition is true for a cell this sell must be painted blue color. For example:
private void start_Click(object sender, EventArgs e)
{
foreach (string str in some_list)
{
if (some condition)
{
set_color_in_cell at row[i] colum[j] //(what shoud i use here?)
}
}
}
I found such example:
private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (e.Row == 0 && e.Column == 1)
{
e.Graphics.FillRectangle(new SolidBrush(Color.Black), e.CellBounds);
}
}
But I don't understand how to use it. If somebody knows about this please help me.
private void start_Click(object sender, EventArgs e)
{
string SyncAnswer = "";
foreach (string file_string in Data_from_file)
{
COM_Port.WriteLine(file_string);
while (SyncAnswer != "READY")
{
SyncAnswer = COM_Port.ReadLine();
if (SyncAnswer.Substring(0, 4) == "Fire")
{
//raise event
//paint for example a cell in Row=i Colum=j
}
else if (SyncAnswer.Substring(0, 4) == "Skip")
{
//raise event
}
}
}
}
Here is a step by step example:
Form
TableLayoutPanel
from toolbox on your Form
tableLayoutPanel1
on design surface and Press F4 Key to see properties.CellPaint
event to create tableLayoutPanel1_CellPaint
event handler in code.e.Row
is the row index, e.Column
is column index and e.CellBounds
is bound of the painting cell.For example in below sample, we draw black background if ((e.Column + e.Row) % 2 == 1)
otherwise, we draw white background:
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);
}
To change Color Dynamically
To change the color from another point of program, for example in a Click
event of a button, you should store back colors of each cell in an 2-dimension array and use that color to create a brush for that cell:
Define bgColors
in your form:
Color[,] bgColors = new Color[2, 2] {
{ SystemColors.Control, SystemColors.Control },
{ SystemColors.Control, SystemColors.Control }
};
Draw background of cells this way:
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
using (var b = new SolidBrush(bgColors[e.Column, e.Row]))
{
e.Graphics.FillRectangle(b , e.CellBounds);
}
}
To change the BackColor
of a Cell
you can:
private void Button1_Click(object sender, EventArgs e)
{
//column: 0 ,row: 1
bgColors[0, 1] = Color.Red;
tableLayoutPanel1.Refresh();
}
As another simple option, you can put Panel
in each cell, and set the Dock
property of Panel
to Fill
and set its Margin
property to 0,0
, then each time you want to change color of a panel at position (column, row)
you can use this code:
this.tableLayoutPanel1.GetControlFromPosition(column, row).BackColor = Color.Red;