Vb.net 单击事件时在窗体中绘制点
任何帮助都将不胜感激。如何在用户单击鼠标的面板上创建彩色点?我可以得到鼠标点击的坐标并通过消息框输出,但我不能在用户点击的面板上画点。我已经试过这些密码了Vb.net 单击事件时在窗体中绘制点,vb.net,winforms,Vb.net,Winforms,任何帮助都将不胜感激。如何在用户单击鼠标的面板上创建彩色点?我可以得到鼠标点击的坐标并通过消息框输出,但我不能在用户点击的面板上画点。我已经试过这些密码了 Private Sub createDot(x, y) MsgBox(x & " " & y) Dim myGraphics As Graphics = Me.CreateGraphics Dim myPen As Pen myPen = New Pen(Drawing.Color.Maro
Private Sub createDot(x, y)
MsgBox(x & " " & y)
Dim myGraphics As Graphics = Me.CreateGraphics
Dim myPen As Pen
myPen = New Pen(Drawing.Color.Maroon, 20)
myGraphics.DrawRectangle(myPen, x, y, 1, 1)
End Sub
Private Sub Panel1_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseClick
missed += 1
lblMissed.Text = missed
Dim x, y As Integer
x = e.X.ToString
y = e.Y.ToString
createDot(x, y)
End Sub
谢谢 如果要在面板上创建点,应将
Me.CreateGraphics
更改为Panel1.CreateGraphics
从中移除ToString
x=e.x
有三件事:
1.如果在面板上绘图,则应使用Panel1.CreateGraphics而不是我。CreateGraphics这支笔的宽度对于一个圆点来说太大了。使用1代替
3.不要将x、y转换为字符串并将其传递给createDot 注意事项:
一旦面板失效(例如,在其上移动另一个窗口),圆点将消失。绘图代码应位于Panel1_Paint event`(斯科特·张伯伦)
什么是
ToString
呢?x、 y必须是整数而不是字符串!您应该在MsgBox
,MsgBox(x.ToString()&“&y.ToString())
4中执行此操作。此方法将不能很好地工作,因为一旦面板失效(例如,您在其上移动另一个窗口,然后将其移开),圆点将消失。绘图代码应该在Panel1\u Paint
事件中,鼠标单击应该只是将Paint事件读取的一些数据结构排队,这样它就知道在哪里绘制,然后调用Panel1。使其无效
。然后可以像……创建全局变量x,y,并在鼠标向下
事件和绘制事件
中更改该值。使用e.CreateGraphics
@JavedAkram绘制如果您处于绘制事件中,则不需要调用CreateGraphics
,绘制事件会将图形对象传递到事件中,作为PaintEventArgs的graphics
属性预先制作。变量不需要是全局的,它们可以是OP放入所有这些方法的表单/控件的局部变量。你根本不应该使用CreateGraphics。一旦有任何东西经过表单前面,或者如果表单最小化/最大化,使用CreateGraphics绘制的所有图形都将消失!
Private Sub createDot(ByVal x As Integer, ByVal y As Integer)
MsgBox(x.ToString & " " & y.ToString)
Dim myGraphics As Graphics = Panel.CreateGraphics
Dim myPen As Pen
myPen = New Pen(Drawing.Color.Maroon, 1)
myGraphics.DrawRectangle(myPen, x, y, 1, 1)
End Sub
Private Sub Panel1_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseClick
missed += 1
lblMissed.Text = missed
createDot(e.x, e.y)
End Sub