我需要编写一个函数,根据运行程序时的某些条件,在TableLayoutPanel
个单元格中设置颜色。
TableLayoutPanel
除以16x16。程序开始时有一些条件。如果细胞的条件为真,则此销售必须涂成蓝色。例如:
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?)
}
}
}
我找到了这样的例子:
private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (e.Row == 0 && e.Column == 1)
{
e.Graphics.FillRectangle(new SolidBrush(Color.Black), e.CellBounds);
}
}
但我不明白如何使用它。如果有人知道这件事,请帮助我。
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
}
}
}
}
答案 0 :(得分:20)
以下是一步一步的例子:
Form
Form
TableLayoutPanel
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
的{{1}},您可以:
Cell
作为另一个简单选项,您可以在每个单元格中添加private void Button1_Click(object sender, EventArgs e)
{
//column: 0 ,row: 1
bgColors[0, 1] = Color.Red;
tableLayoutPanel1.Refresh();
}
,并将Panel
的{{1}}属性设置为Dock
并设置其Panel
属性到Fill
,然后每当您想要更改位置Margin
的面板颜色时,您都可以使用此代码:
0,0
答案 1 :(得分:0)