【发布时间】:2018-07-06 12:28:45
【问题描述】:
接下来的代码让您可以用鼠标在窗体中绘制矩形。 为什么不,或者如何在 PictureBox 上绘制?
Public Class Form1
Dim SelectRect As Rectangle = New Rectangle()
Dim ps As Point = New Point()
Dim pe As Point = New Point()
这会捕获矩形的第一次点击、起点或角
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
SelectRect.Width = 0
SelectRect.Height = 0
SelectRect.X = e.X
SelectRect.Y = e.Y
ps.X = e.X
ps.Y = e.Y
pe = ps
End Sub
这部分决定了矩形的宽高:
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If (e.Button = MouseButtons.Left) Then
ControlPaint.DrawReversibleFrame(Me.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed)
SelectRect.Width = e.X - SelectRect.X
SelectRect.Height = e.Y - SelectRect.Y
ControlPaint.DrawReversibleFrame(Me.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed)
End If
End Sub
这部分确定最后一个坐标,矩形的第二个角:
Private Sub Form1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
Dim g As Graphics = Me.CreateGraphics()
Dim p As Pen = New Pen(Color.Blue, 2)
ControlPaint.DrawReversibleFrame(Me.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed)
g.DrawRectangle(p, SelectRect)
g.Dispose()
End Sub
End Class
【问题讨论】:
-
有什么问题?是一样的。
-
始终使用 PaintEvent 进行所有绘图。
CreateGraphics几乎总是做错事 -
@Jimi 类似,我之前找到了这段代码,这个代码可以让你直接在表单上手动绘制矩形(不是以编程方式分配的位置),但是如果你有一个 PictureBox 绘图就可以在返回(表单)-如果某些部分仍然可见-,但您不能在 PictureBox 上绘图。这就是问题
-
让我明白。您只想在 PictureBox 上绘图吗?还是Form和PictureBox?换句话说,您拥有该代码,但您不知道如何调整它以在不同的控件上绘制形状。是这样吗?
-
如果您没有处理
Paint事件,那么您做错了。MouseDown、MouseMove和MouseUp事件应该只记录鼠标位置,然后通过调用Refresh或Invalidate和Update强制重绘。绘图应该全部在Paint事件处理程序中完成,情况总是如此。永远不要打电话给CreateGraphics。
标签: vb.net winforms graphics mouseevent picturebox