Ser*_*gey 5 .net c# tablelayoutpanel winforms
我需要编写一个函数,它将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?)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了这样的例子:
private void tableLayoutPanel_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
if (e.Row == 0 && e.Column == 1)
{
e.Graphics.FillRectangle(new SolidBrush(Color.Black), e.CellBounds);
}
}
Run Code Online (Sandbox Code Playgroud)
但我不明白如何使用它.如果有人知道这个,请帮助我.
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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Rez*_*aei 25
这是一个循序渐进的例子:
FormTableLayoutPanel工具箱放在你的工具箱上FormtableLayoutPanel1在设计图面上选择,然后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);
}
Run Code Online (Sandbox Code Playgroud)
动态更改颜色
要从另一个程序点更改颜色,例如在Click按钮的情况下,您应该将每个单元格的颜色存储在二维数组中,并使用该颜色为该单元格创建画笔:
bgColors在表单中定义:
Color[,] bgColors = new Color[2, 2] {
{ SystemColors.Control, SystemColors.Control },
{ SystemColors.Control, SystemColors.Control }
};
Run Code Online (Sandbox Code Playgroud)
以这种方式绘制单元格的背景:
private void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
using (var b = new SolidBrush(bgColors[e.Column, e.Row]))
{
e.Graphics.FillRectangle(b , e.CellBounds);
}
}
Run Code Online (Sandbox Code Playgroud)
要改变BackColor的Cell,您可以:
private void Button1_Click(object sender, EventArgs e)
{
//column: 0 ,row: 1
bgColors[0, 1] = Color.Red;
tableLayoutPanel1.Refresh();
}
Run Code Online (Sandbox Code Playgroud)
作为另一个简单的选项,您可以放入Panel每个单元格,并设置to 的Dock属性并将其属性设置为,然后每次要更改位置的面板颜色时,您可以使用此代码:PanelFillMargin0,0(column, row)
this.tableLayoutPanel1.GetControlFromPosition(column, row).BackColor = Color.Red;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17234 次 |
| 最近记录: |