绘制线的按钮vb.net不工作?

绘制线的按钮vb.net不工作?,vb.net,button,line,draw,Vb.net,Button,Line,Draw,我正在尝试使用一个不起作用的按钮创建一行 如果我使用以下代码 Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) Dim g As Graphics = e.Graphics Dim pn As New Pen(Color.Blue)

我正在尝试使用一个不起作用的按钮创建一行

如果我使用以下代码

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms

  Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
      Dim g As Graphics = e.Graphics
      Dim pn As New Pen(Color.Blue)
      Dim pt1 As New Point(30, 30)
      Dim pt2 As New Point(110, 100)
      g.DrawLine(pn, pt1, pt2)
End sub
它工作得很好,但如果我只想在单击按钮后绘制,例如

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

      Dim g As Graphics = e.Graphics
      Dim pn As New Pen(Color.Blue)
      Dim pt1 As New Point(30, 30)
      Dim pt2 As New Point(110, 100)
      g.DrawLine(pn, pt1, pt2)

    End Sub
它说“图形”不是“System.EventArgs”的成员

我还试着改变:

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
致:

还有一些类似的变化(很多要列出),但我也得到了一些错误响应


那么,如何使用e.graphics通过点击按钮来画一条线呢?

您需要一个表单图形上下文的引用(我假设这里是WinForms)

最简单的方法是在按钮顶部添加此行,单击:

Dim g As Graphics = Me.CreateGraphics

绘制图形要比这复杂得多,因为如果绘制的内容包含在
PaintEventArgs
e.ClipRectangle
属性中,则当
OnPaint
事件触发时,您应该真正将所绘制的内容保存到内存中,并根据需要重新绘制,但上面的代码行应该可以让您启动d现在。

您正在使用的两个事件具有不同的事件参数。单击事件参数包含有关单击的信息,而绘制事件参数包含有关绘制内容的信息

您可以调用以重新绘制按钮并使用onPaint方法。这是一种很好的编程风格。将事件与相应的内容配对。绘制到绘制。单击以单击

Private drawLine as boolean = false

Private Sub Button1_Paint(sender As Object, e As PaintEventArgs) Handles Button1.Paint
  If drawLine then
    Dim g As Graphics = e.Graphics
    Dim pn As New Pen(Color.Blue)
    Dim pt1 As New Point(30, 30)
    Dim pt2 As New Point(110, 100)
    g.DrawLine(pn, pt1, pt2)
  End if
End sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  drawLine = true
  Button1.refresh()
End Sub
Private drawLine as boolean = false

Private Sub Button1_Paint(sender As Object, e As PaintEventArgs) Handles Button1.Paint
  If drawLine then
    Dim g As Graphics = e.Graphics
    Dim pn As New Pen(Color.Blue)
    Dim pt1 As New Point(30, 30)
    Dim pt2 As New Point(110, 100)
    g.DrawLine(pn, pt1, pt2)
  End if
End sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  drawLine = true
  Button1.refresh()
End Sub