写了Draw过程,想放在主窗体启动的时候,PictureBox就显示出来,可是一闪而过,什么原因呢
我写了一个PictureBox的Draw过程,想在窗体启动时候,Picturebox上面就绘制了我的要求,可是我把定义的过程放在主窗体的Active或者paint事件里面,发现是一闪而过,Picturebox又变成了原来的样子,这是为什么呢?我如果人工去调用这个绘画过程,Picturebox可以显示我的绘画过程,这是为什么呢?
Public Sub DrawXYPlotCanvas() Dim i As Integer Using linepen As New Pen(Color.White, 1) '定义画笔 Dim Rec_XYPlot As New Rectangle(0, 0, pbWidth, pbHeight) '定义PictureBox 矩形区域 Dim Rec_Font As New RectangleF '定义绘字矩形区域 Dim Brush_Font As New SolidBrush(Color.White) '定义字体颜色 Dim Brush_pb As New SolidBrush(Color.Black) '重绘Picturebox颜色 Dim Plot_Font As New Font("Arial", 10, FontStyle.Regular) '定义字体 '获取坐标原点 Org_x = LeftOffset Org_Y = pbHeight - BootomOffset '获取 X轴,Y轴间隔值 XInterval = (pbWidth - LeftOffset - RightOffset) / Xtickcounts '58 YInterval = (pbHeight - TopOffset - BootomOffset) / Ytickcounts '32 '每次绘制之前,重绘PictureBox xyplot.FillRectangle(Brush_pb, Rec_XYPlot) '纵坐标 xyplot.DrawLine(linepen, LeftOffset, TopOffset / 2, LeftOffset, pbHeight - BootomOffset / 2 - 5) '横坐标 ' xyplot.DrawLine(linepen, 20, pbHeight / 2 - 2, pbWidth - RightOffset, pbHeight / 2 - 2) linepen.DashStyle = DashStyle.Dash '绘制网格虚线 'X轴方向虚线 10条 'Y轴方向虚线 10条 For i = 0 To 10 linepen.DashStyle = DashStyle.Dash '从最下面的轴开始绘制 ' If i <> 5 Then xyplot.DrawLine(linepen, LeftOffset, (pbHeight - TopOffset) - YInterval * i, pbWidth - RightOffset, (pbHeight - TopOffset) - YInterval * i) ' End If '从最左侧开始绘制 If i <> 0 Then xyplot.DrawLine(linepen, LeftOffset + XInterval * i, TopOffset - 3, LeftOffset + XInterval * i, pbHeight - TopOffset) End If linepen.DashStyle = DashStyle.Solid 'Draw X Axis tickcounts xyplot.DrawLine(linepen, LeftOffset, TopOffset + YInterval * i - 5, 18, TopOffset + YInterval * i - 5) 'Draw Y Axis tickcounts xyplot.DrawLine(linepen, LeftOffset + XInterval * i, pbHeight - BootomOffset, LeftOffset + XInterval * i, pbHeight - BootomOffset + 7) Next '绘制纵坐标刻度 For i = 0 To 10 If i > 5 Then xyplot.DrawString(CStr(5 - i * 1), Plot_Font, Brush_Font, 0, TopOffset / 2 + YInterval * i) Else xyplot.DrawString(CStr(5 - i * 1), Plot_Font, Brush_Font, 0 + FontOffset, TopOffset / 2 + YInterval * i) End If Next '绘制横坐标刻度 For i = 0 To 10 ' If i <> 0 Then '差一个像素点 xyplot.DrawString(CStr(i * 1000), Plot_Font, Brush_Font, XInterval * i, pbHeight - BootomOffset + 7) ' End If Next End Using End Sub
xyplot是什么?它取得对象你认为真的有效么(在PictureBox刷新之后)?
用下面的这段代码试试:
mports System.Drawing.Drawing2D
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim bmp = New Bitmap(PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height)
Dim g = Graphics.FromImage(bmp)
g.FillRectangle(New SolidBrush(Color.Gainsboro), 0, 0, PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height)
g.DrawLine(New Pen(Color.Blue, 2.0F), 60, 90, 80, 140)
PictureBox1.Image = bmp
End Sub
End Class
用下面的这段代码试试:
mports System.Drawing.Drawing2D
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim bmp = New Bitmap(PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height)
Dim g = Graphics.FromImage(bmp)
g.FillRectangle(New SolidBrush(Color.Gainsboro), 0, 0, PictureBox1.ClientSize.Width, PictureBox1.ClientSize.Height)
g.DrawLine(New Pen(Color.Blue, 2.0F), 60, 90, 80, 140)
PictureBox1.Image = bmp
End Sub
End Class