1

機能しないボタンを使用してラインを作成しようとしています。

次のコードを使用すると、

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

「'Graphics' は 'System.EventArgs' のメンバーではありません。???」と表示されます。

私も変更しようとしました:

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

に:

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

そして、いくつかの類似のバリエーション(リストには多くあります)がありますが、エラー応答も得られます。

では、e.graphics を使用して、ボタンをクリックするだけでどのように線を引くのですか?

4

2 に答える 2

0

使用している 2 つのイベントには、異なる EventArgs があります。Click EventArgs にはクリックに関する情報があり、PaintEventArgs には何をペイントするかに関する情報があります。

ボタンを再描画し、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
于 2013-04-22T12:10:03.600 に答える