BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #1775同步于 2010/5/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

绘制曲线

wshh
2010/5/15镜像同步2 回复
在下想在PictureBox中绘制曲线。 我在MainForm中放置了一个Button,一个PictureBox,还有一个TextBox。希望在:1.把数值输入到TextBox;2.点击Button,这两步之后在PictureBox中显示一个由我指定了位置的曲线。 在写代码时,单击Button这一事件会触发PictureBox.Refresh()这一方法,以强制触发PictureBox的Paint事件。 在PictureBox的paint事件下,我使用 Dim RedPen As New Pen(Color.Red, 1) '定义了红色画笔 '用for循环,循环画短线段。短线段连起来,就是一条曲线了。 If DrawCurveBoolean = True Then 'DrawCurveBoolean用来判断Button是否被按下 For n = 0 To 4100 Dim Point1 As New PointF(22.0F + n / 10, 100) Dim Point2 As New PointF(22.0F + (n + 1) / 10, 100) Dim CurvePoints As PointF() = {Point1, Point2} e.Graphics.DrawCurve(RedPen, CurvePoints) '将两点连成线 Next End if 我的问题是,每次当我重新在文本框中输入一个数值,并按下Button后,PictureBox中的曲线都会被重新绘制。问题是,我想比较前后两次曲线的位置的不同,所以要求前后两次画出的曲线可以同时显示。 哪位大牛可以指导一下,小弟将感激涕零。。。
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
ahomer机器人#1 · 2010/5/16
把点数据存起来,分成多组,比如分成前后两组,绘制的时候遍历该数组, 顺次画图就行了 每次button把点数据存入点分组中。 【 在 wshh (wsh) 的大作中提到: 】 : 在下想在PictureBox中绘制曲线。 : 我在MainForm中放置了一个Button,一个PictureBox,还有一个TextBox。希望在:1.把数值输入到TextBox;2.点击Button,这两步之后在PictureBox中显示一个由我指定了位置的曲线。 : 在写代码时,单击Button这一事件会触发PictureBox.Refresh()这一方法,以强制触发PictureBox的Paint事件。 : ...................
duvet机器人#2 · 2010/5/17
【 在 wshh 的大作中提到: 】 : 在下想在PictureBox中绘制曲线。 : 我在MainForm中放置了一个Button,一个PictureBox,还有一个TextBox。希望在:1.把数值输入到TextBox;2.点击Button,这两步之后在PictureBox中显示一个由我指定了位置的曲线。 : 在写代码时,单击Button这一事件会触发PictureBox.Refresh()这一方法,以强制触发PictureBox的Paint事件。 : ................... 真不容易,有个用VB的 以下是我的解决方法 1.全局声明一个Bitmap类和一个Graphics类变量 Private bmp As Bitmap Private g As Graphics 2.在Form_Load方法里面实例化之 bmp = New Bitmap(PictureBox1.Width, PictureBox1.Height) g = Graphics.FromImage(bmp) 3.在Button1_Click方法中使用如下语句(请自行改为你需要画的图形) Dim r As New Random g.DrawLine(Pens.Black, r.Next(PictureBox1.Width), r.Next(PictureBox1.Height), r.Next(PictureBox1.Width), r.Next(PictureBox1.Height)) PictureBox1.Image = bmp 4.无论点多少次,PictureBox里面的图都是累加,需要清空时,使用: g.Clear(Color.Transparent) PictureBox1.Image = bmp