Zeichnen mit 'Graphics' mit Hilfe eines Klassenaufrufs

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Zeichnen mit 'Graphics' mit Hilfe eines Klassenaufrufs

    Hallo,
    um mehr Übersichtlichkeit zu erhalten, möchte ich folgende Methode:

    Public Class Form1
    Private Sub ZeichnenLinie()
    Dim z As Graphics = CreateGraphics()
    Dim stift As New Pen(Color.Red, 2)
    z.DrawLine(stift, 100, 40, 100, 60)
    End Sub
    End Class

    in eine Klasse auslagern:
    z.B. mit Aufruf:
    Dim z as New CLinie(...)

    Leider kann ich in einer eigenen Klasse keine Graphic-Elemente starten.
    So erhält:
    Friend Class CLinie
    Dim z As Graphics = CreateGraphics()
    Dim stift As New Pen(Color.Red, 2)

    Sub New()
    z.DrawLine(stift, 100, 40, 100, 60)
    End Sub
    End Class

    immer eine Fehlermeldung. Zudem kann ich kein Parent angeben, um auf die Form zu zeichnen.

    Woher muss ich erben?
    Was muss ich einbinden?

    Vielen Dank für eine schnelle Antwort!!!

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Vergiss am besten schnell CreateGraphics, jedes Control hat ein Graphics-Object das mit den Paint-Event-Args in der Paint-Routine reinkommt.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim p As New Painter
    3. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    4. p.DrawLine(e.Graphics, New Point(0, 0), New Point(ClientRectangle.Width, ClientRectangle.Height))
    5. End Sub
    6. End Class
    7. Public Class Painter
    8. Public Sub DrawLine(ByVal g As Graphics, ByVal startPoint As Point, ByVal endPoint As Point, Optional ByVal pen As Pen = Nothing)
    9. If pen Is Nothing Then
    10. pen = New Pen(Color.Black, 1)
    11. End If
    12. g.DrawLine(Pens.Blue, startPoint, endPoint)
    13. End Sub
    14. End Class
    Hmm - ich sehe bei dieser "Auslagerung zur Vereinfachung" aber keinerlei Vereinfachung, sondern deren GEgenteil.
    Ohne Auslagerungs-(Unfug) sähe es so aus:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    3. e.Graphics.DrawLine(Pens.Black, New Point(0, 0), New Point(ClientRectangle.Width, ClientRectangle.Height))
    4. End Sub
    5. End Class

    Anners gesagt: Was diese (nun eingesparte) Painter-Klasse kann, kann Graphics schon lange!
    @ErfinderDesRades Jou.
    @Baerle Willkommen im Forum. :thumbup:
    Wenn Du dieese DrawLine-Prozedsur ohne Pen aufrufst, wird jedes Mal eine IDisposable-Instanz erzeugt und nicht weggeräumt.
    Das kann im Ernstfall zu merkwürdigen Effekten führen, die Du Dir dann nicht erklären kannst.
    Da ist die Verwendung von Pens.Black, wie von EDR verwendet, die richtige Lösung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!