博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#窗口矩形区域着色
阅读量:6655 次
发布时间:2019-06-25

本文共 1187 字,大约阅读时间需要 3 分钟。

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]);        }

转载地址:http://huato.baihongyu.com/

你可能感兴趣的文章
《统一沟通-微软-实战》-6-部署-7-部署移动功能-2
查看>>
go语言笔记——调试还很弱,用gdb来做?可用panic和defer。格式化代码使用gofmt,貌似我的vim插件是自带...
查看>>
Linux 安装.src.rpm源码包的方法
查看>>
c#将对象序列化为字符串和将字符串反序列化为对象
查看>>
Android Loader详解四:回调及完整例子
查看>>
Oracle笔记 三、function 、select
查看>>
PHP5.5面向对象连接mysqli
查看>>
一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件...
查看>>
Linux命令大全
查看>>
git 拉取和获取 pull 和 fetch 区别
查看>>
html5系列目录
查看>>
C# 视频监控系列(1):准备
查看>>
6.3. 获取当前用户
查看>>
软件架构中的层次依赖
查看>>
两个容易被忽略的mysql知识
查看>>
ORACLE SOA SUITE ORABPEL-12133 错误解决
查看>>
除了新闻识别,这家媒体还利用AI管理内容分发,2500万人已关注
查看>>
【Python】执行系统命令的常见用法
查看>>
Yarn 安装
查看>>
敏捷开发中如何定义“完成”?
查看>>