代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
g = PictureBox1.CreateGraphics
’画圆
pen1 = New Drawing.Pen(Color.Red, 1)
g.DrawEllipse(pen1, 0, 0, 2 * r, 2 * r)
'画直线
pen1 = New Drawing.Pen(Color.Green, 1)
g.Graphics.DrawLine(pen1, P_X(1), P_Y(1), P_X(1) + 60, P_Y(1))
End Sub
目的很简单,就是想点Button让picturebox1中画出我要的图形,并且进行界面操作的时候图形不会消失,请高手指点,并给出代码
6 个解决方案
#1
貌似没有VB6那个持续功能。。。。没看
方法倒是挺多的,可以在切换回来的时候,找到一个恰当的事件。。然后再次绘图。。。。
可以重载消息函数什么什么的绘图。。重载谁的就看你的爱好了。。。。
当然还有更简单的。。画一个容器进去。。。panel了,image什么什么的,然后在内存画你的图像,画好了放进去。。。
要是特别的情况,可以看看那个控件有没有背景图属性什么的,把画好的图像放进去。。。。
反正你就慢慢想吧,办法会有的……效率高的有,效率低下的也有。。。。。
方法倒是挺多的,可以在切换回来的时候,找到一个恰当的事件。。然后再次绘图。。。。
可以重载消息函数什么什么的绘图。。重载谁的就看你的爱好了。。。。
当然还有更简单的。。画一个容器进去。。。panel了,image什么什么的,然后在内存画你的图像,画好了放进去。。。
要是特别的情况,可以看看那个控件有没有背景图属性什么的,把画好的图像放进去。。。。
反正你就慢慢想吧,办法会有的……效率高的有,效率低下的也有。。。。。
#2
Dim image As New Bitmap(300, 300, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(image)
g.DrawLine(New Pen(Color.Black), 0, 0, 200, 200)
Me.PictureBox1.Image = image
这段代码是可以自动重绘的
如果不想用
Me.PictureBox1.Image = image
那就在
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
End Sub
这个事件中用 e.Graphics.DrawLine ...
但如果用这种方式的时候,如果绘图的内容多的话,每paint一次,就重绘(计算)一次,会影响效果,建议用第一种。
Dim g As Graphics = Graphics.FromImage(image)
g.DrawLine(New Pen(Color.Black), 0, 0, 200, 200)
Me.PictureBox1.Image = image
这段代码是可以自动重绘的
如果不想用
Me.PictureBox1.Image = image
那就在
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
End Sub
这个事件中用 e.Graphics.DrawLine ...
但如果用这种方式的时候,如果绘图的内容多的话,每paint一次,就重绘(计算)一次,会影响效果,建议用第一种。
#3
首先谢谢你的回复,但我想要的不是自动绘图,而是点一个button健后绘图,而且在对界面进行操作的时候图像不会丢失。用paint来绘图是可以不丢失的,非常不灵活。我想把一段代码放到button_click中,该怎么做那?也就是怎么让paint不要自动绘图,而是在点button后再绘图。
#4
而且我需要在一张picturebox或者groupbox内画多个图形,每点一个button画一个出来,如何才能实现那?
#5
赫赫上面说的第一种就不时自动绘图的啊,具体过程是
在窗体中声明两个变量
private image As Image
private g As Graphics
在窗体的load过程中初始化变量
image = New Bitmap(300, 300, Imaging.PixelFormat.Format32bppArgb)
g = Graphics.FromImage(image)
然后在Button中写下你的绘图代码
g.DrawLine(New Pen(Color.Black), 0, 0, 200, 200) '当然,每个按钮是不一样的绘图代码咯
Me.PictureBox1.Image = image
就可以啦.这只是最基本的代码咯,如果你想更灵活点,就要多练习咯.
在窗体中声明两个变量
private image As Image
private g As Graphics
在窗体的load过程中初始化变量
image = New Bitmap(300, 300, Imaging.PixelFormat.Format32bppArgb)
g = Graphics.FromImage(image)
然后在Button中写下你的绘图代码
g.DrawLine(New Pen(Color.Black), 0, 0, 200, 200) '当然,每个按钮是不一样的绘图代码咯
Me.PictureBox1.Image = image
就可以啦.这只是最基本的代码咯,如果你想更灵活点,就要多练习咯.
#6
ls的正解,就是将所绘图绘在image上。
#1
貌似没有VB6那个持续功能。。。。没看
方法倒是挺多的,可以在切换回来的时候,找到一个恰当的事件。。然后再次绘图。。。。
可以重载消息函数什么什么的绘图。。重载谁的就看你的爱好了。。。。
当然还有更简单的。。画一个容器进去。。。panel了,image什么什么的,然后在内存画你的图像,画好了放进去。。。
要是特别的情况,可以看看那个控件有没有背景图属性什么的,把画好的图像放进去。。。。
反正你就慢慢想吧,办法会有的……效率高的有,效率低下的也有。。。。。
方法倒是挺多的,可以在切换回来的时候,找到一个恰当的事件。。然后再次绘图。。。。
可以重载消息函数什么什么的绘图。。重载谁的就看你的爱好了。。。。
当然还有更简单的。。画一个容器进去。。。panel了,image什么什么的,然后在内存画你的图像,画好了放进去。。。
要是特别的情况,可以看看那个控件有没有背景图属性什么的,把画好的图像放进去。。。。
反正你就慢慢想吧,办法会有的……效率高的有,效率低下的也有。。。。。
#2
Dim image As New Bitmap(300, 300, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(image)
g.DrawLine(New Pen(Color.Black), 0, 0, 200, 200)
Me.PictureBox1.Image = image
这段代码是可以自动重绘的
如果不想用
Me.PictureBox1.Image = image
那就在
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
End Sub
这个事件中用 e.Graphics.DrawLine ...
但如果用这种方式的时候,如果绘图的内容多的话,每paint一次,就重绘(计算)一次,会影响效果,建议用第一种。
Dim g As Graphics = Graphics.FromImage(image)
g.DrawLine(New Pen(Color.Black), 0, 0, 200, 200)
Me.PictureBox1.Image = image
这段代码是可以自动重绘的
如果不想用
Me.PictureBox1.Image = image
那就在
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
End Sub
这个事件中用 e.Graphics.DrawLine ...
但如果用这种方式的时候,如果绘图的内容多的话,每paint一次,就重绘(计算)一次,会影响效果,建议用第一种。
#3
首先谢谢你的回复,但我想要的不是自动绘图,而是点一个button健后绘图,而且在对界面进行操作的时候图像不会丢失。用paint来绘图是可以不丢失的,非常不灵活。我想把一段代码放到button_click中,该怎么做那?也就是怎么让paint不要自动绘图,而是在点button后再绘图。
#4
而且我需要在一张picturebox或者groupbox内画多个图形,每点一个button画一个出来,如何才能实现那?
#5
赫赫上面说的第一种就不时自动绘图的啊,具体过程是
在窗体中声明两个变量
private image As Image
private g As Graphics
在窗体的load过程中初始化变量
image = New Bitmap(300, 300, Imaging.PixelFormat.Format32bppArgb)
g = Graphics.FromImage(image)
然后在Button中写下你的绘图代码
g.DrawLine(New Pen(Color.Black), 0, 0, 200, 200) '当然,每个按钮是不一样的绘图代码咯
Me.PictureBox1.Image = image
就可以啦.这只是最基本的代码咯,如果你想更灵活点,就要多练习咯.
在窗体中声明两个变量
private image As Image
private g As Graphics
在窗体的load过程中初始化变量
image = New Bitmap(300, 300, Imaging.PixelFormat.Format32bppArgb)
g = Graphics.FromImage(image)
然后在Button中写下你的绘图代码
g.DrawLine(New Pen(Color.Black), 0, 0, 200, 200) '当然,每个按钮是不一样的绘图代码咯
Me.PictureBox1.Image = image
就可以啦.这只是最基本的代码咯,如果你想更灵活点,就要多练习咯.
#6
ls的正解,就是将所绘图绘在image上。