Controll problem Grafik wird nicht gezeichnet...

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Phil_man.

    Controll problem Grafik wird nicht gezeichnet...

    Hallo,

    Ich hab nun mein altes Progressbarcontrol mithilfe von X-Zat überarbeitet nur zeichnet er komischerweise die Grafiken nicht.

    weiß da jemand weiter ?

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Drawing
    3. Imports System.Drawing.Drawing2D
    4. Imports System.ComponentModel
    5. Imports System.Windows.Forms
    6. Public Class Dll_test
    7. Inherits ProgressBar
    8. Public Sub New()
    9. MyBase.New()
    10. MyBase.SetStyle(ControlStyles.UserPaint, True) 'Der controll sagen das wir sie zeichnen
    11. MyBase.SetStyle(ControlStyles.AllPaintingInWmPaint, True) 'Der controll sagen das wir sie zeichnen
    12. MyBase.SetStyle(ControlStyles.DoubleBuffer, True) 'DoubleBuffer aktivieren
    13. MyBase.SetStyle(ControlStyles.SupportsTransparentBackColor, True) 'Transparente hintergrundfarbe aktivieren (für diese anwendung nicht zwingend notwendig)
    14. End Sub
    15. Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
    16. Dim g1 As Graphics
    17. Dim p As New Pen(System.Drawing.Color.Black)
    18. g1 = e.Graphics
    19. Dim R2 As Rectangle = New Rectangle(Location, New Size(Width, Height))
    20. With g1
    21. .DrawRectangle(p, R2)
    22. End With
    23. Dim R As Rectangle = New Rectangle(Location, New Size(CInt(100 / Width * Value), Height))
    24. With g1
    25. .DrawRectangle(p, R)
    26. End With
    27. g1.FillRectangle(Brushes.Orange, R)
    28. End Sub
    29. End Class


    Da ich ja auch noch nicht soviel Ahnung von Controlls habe hoffe ich auf eure Hilfe ^^
    2 Dinge:
    1. Deine Paint Sub ist nicht an das Steuerelement gebunden. Schreib einfach

    VB.NET-Quellcode

    1. Private Sub Grafik(sender As Object, e As PaintEventArgs) Handles Me.Paint
    2. 'Deine Malerei
    3. End Sub
    Damit wird deine Sub immer mit Me.Paint automatisch aufgerufen.

    2. Wozu erzeugst du ein zusätzliches Graphics-Objekt G1? Nutze direkt das Graphics-Objekt, dass dir mit e übergeben wird: e.DrawIrgendwas(wohinauchimmer)

    Fiel Fergnügen
    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    @Vatter
    1. Er hat hier die von Control vererbte Methode OnPaint() überschrieben, was absolut legitim und funktionstüchtig ist, wenn man dies in einer von Control abgeleiteten Klasse tut.
    2. Erzeugt er g1 nicht neu, sondern nutzt das Graphics-Objekt aus den PaintEventArgs, genau wie er es tun sollte.
    @TO
    Ich vermute, dein Problem rührt daher, dass du als Koordinaten die Location-Eigenschaft angibst. Für den Contaienr (z. B. Form) ist die obere linke Ecke des Controls Location, aber für das Control (und hier sind wir gerade) ist diese Ecke (0|0).

    Viele Grüße, Phil.
    Hi,
    Danke für eure Antworten erstmal.

    Und was müsste ich dann anstelle von location machen ?


    EDIT: Habs heraus gefunden ^^

    VB.NET-Quellcode

    1. Dim loc as Point = New Point(0,0)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Phil_man“ ()