博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#矩形框沿直线移动
阅读量:5309 次
发布时间:2019-06-14

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

C#中用GDT+的一系列方式,可以绘制各种图形:点,直线,圆形,矩形......

C#中这些图形的绘制,一般教程的demo中给出的代码,是在Form1_Paint(object sender, PaintEventArgs e)函数中完成绘图。这个函数是窗口一出来就调用。

如果我希望GUI界面上某个事件发生后再绘图(而不是窗口一上来就绘制),那就在对应的事件处理函数中调用绘图的函数代码。一般的事件处理函数不带PaintEventArgs参数,通过定义Graphics类型的全局变量g并调用窗体的CreateGraphics函数来解决。

下面给出一个简单的例子:一个简单窗体,界面上只有一个按钮btn,点击btn会在窗口指定位置产生一个绿色矩形框,并向右移动一定距离。

通过前述方式+timer控件,可以实现这个操作,代码如下:

public partial class Form1 : Form {        public Form1() {            InitializeComponent();            g = this.CreateGraphics();            rect = new Rectangle(x, y, width, height);            timer1.Tick += new System.EventHandler(timer1_Tick);            timer1.Interval = 100;        }        private Timer timer1 = new Timer();        private Pen pen = new Pen(Color.Lime, 2); //绿色画笔        private Pen DefaultPen = new Pen(Control.DefaultBackColor, 2); //颜色和窗体背景色相同的画笔        int x = 100, y = 100;        int width = 60, height = 60;        private Rectangle rect;        private Graphics g;        private void button1_Click(object sender, EventArgs e) {            //move2right();            timer1.Enabled = true;        }        //整个矩形框整体向右移动两个距离        private void move2right() {            g.DrawRectangle(DefaultPen, rect);            rect.X += 2;            g.DrawRectangle(pen, rect);            Invalidate(rect);        }        //计时器,用来让矩形持续移动        public void timer1_Tick(object sender, EventArgs e) {            if (rect.X < 410) {                move2right();            }        }    }

以上代码通过每次把前面一次绘制的矩形框颜色涂为窗体背景色,然后在新位置绘制新的矩形,缺点是如果窗口中除了矩形框还有别的图形,比如直线,那么这个先前绘制的之间会被擦除。

转载于:https://www.cnblogs.com/zjutzz/p/4439814.html

你可能感兴趣的文章
mac笔记本怎样显示隐藏的文件
查看>>
关于socket通讯,如何才能高效?
查看>>
NPOI导Excel样式设置
查看>>
webp图像批量转换软件推荐——XnConvert
查看>>
PHP session用redis存储
查看>>
hdu1232畅通工程 并查集
查看>>
JS和CSS实现响应式
查看>>
动态修改JS对象的值及React setState
查看>>
51nod1244 莫比乌斯函数之和
查看>>
$(document).height 与$(window).height的区别
查看>>
Android WebView默认GONE出现的问题记录
查看>>
关于敏捷开发的一些想法
查看>>
php处理脚本执行超时
查看>>
UVALive 5888 Stack Machine Executor (栈+模拟)
查看>>
[C语言]结构体初始化的不同方法
查看>>
大数据作业
查看>>
CSS 固定布局
查看>>
Altera 与 Xilinx开发环境对比
查看>>
(28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
查看>>
【AngularJS】—— 13 服务Service
查看>>