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