当前位置:  开发笔记 > 编程语言 > 正文

如何动态设置TableLayoutPanel中的单元格颜色?

如何解决《如何动态设置TableLayoutPanel中的单元格颜色?》经验,为你挑选了1个好方法。



1> Reza Aghaei..:

选项1 - 使用CellPaint事件

这是一个循序渐进的例子:

    创建一个 Form

    把一个TableLayoutPanel工具箱放在你的工具箱上Form

    tableLayoutPanel1在设计图面上选择,然后F4按键查看属性.

    从属性网格的工具栏中,您可以选择显示"属性" enter image description here或"事件" enter image description here.单击事件图标,然后从列表中双击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);
    }
}

要改变BackColorCell,您可以:

private void Button1_Click(object sender, EventArgs e)
{
    //column: 0 ,row: 1
    bgColors[0, 1] = Color.Red;
    tableLayoutPanel1.Refresh();
}

选项2 - 在单元格中托管面板

作为另一个简单的选项,您可以放入Panel每个单元格,并设置to 的Dock属性并将其属性设置为,然后每次要更改位置的面板颜色时,您可以使用此代码:PanelFillMargin0,0(column, row)

this.tableLayoutPanel1.GetControlFromPosition(column, row).BackColor = Color.Red;

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有