C#写的一个GUI窗口,有几百个矩形区域。每个矩形区域的颜色随时都可能改变,并且多次改变。
我放弃使用label绘制矩形,因为效果不好。拖控件的界面使用power packs中的rectangleshape绘制。而颜色的修改在c#代码中进行设定。
通过计算坐标,C#中的代码能和界面上绘制的矩形框对应。颜色绘制使用GDI的函数,例如
Graphics g = e.Graphics; g.FillRectangle(brush, rect);通过封装,可以编写出一个函数,指定矩形框的坐标和颜色,就能着色。
首先构造函数中添加
this.Paint += new PaintEventHandler(Form1_Paint);
然后编写自定义函数Form1_Paint
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e){ Graphics g = e.Graphics; //g.DrawRectangle(new Pen(Color.Red, 4), rect); int i, j, k; for (i = 0; i < 4; i++) { for (j = 0; j < 5; j++) { for (k = 0; k < 25; k++) { g.FillRectangle(brush, rect[i,j,k]); } } } }
其中brush是数据成员:
private SolidBrush brush = new SolidBrush(Color.White);
rect[i,j,k]是C#代码中定义的矩形区域,也是数据成员,比如:
private Rectangle[,,] rect = new Rectangle[4,5,25];
并记得编写相应的初始化函数,初始化每个rectangle(比如放在构造函数中最前面)
然后是最后绘制调用函数,每次指定颜色时,更新成员变量brush的Color字段,然后调用invalidate(rect[i,j,k]):
private void drawBlock(int i, int j, int k, Color color) { brush.Color = color; Invalidate(rect[i, j, k]); }