Progressbar Control

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Progressbar Control

    Hi Community,

    ich beschäftige mich zur Zeit mit der Erstellung von Controls unteranderem einer Progressbar. Normalerweise Zeichne ich die Controls immer so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Windows.Forms
    2. Imports System.Drawing.Drawing2D
    3. Imports System.Drawing
    4. Public Class Progresscontrol
    5. Inherits ProgressBar
    6. Private Sub ProgressControl_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    7. With e.Graphics
    8. e.Graphics.Clear(Me.BackColor)
    9. ' Zeichenkram
    10. End With
    11. End Sub


    Das Control wird durch e.Graphics.Clear(Me.BackColor) nicht gelöscht wie bei Checkboxen. Das selbe bei Numericupdown.

    Wie muss man hier vorgehen?

    8-) faxe1008 8-)
    ich steh grad en wenig aufm schlauch. hab gerade nachgeschaut das control progressbar verfügt nicht über ein Event namens OnPaintBackground(...). Das die Punkte nicht dazugehören weiß ich :P .

    Könnte jemand das vollständige Event posten oder einen Screenshot wo man sieht wo es versteckt ist?

    8-) faxe1008 8-)

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

    Lass dir einfach nichts durch die Progressbar vererben (Inherits)
    Sondern machs komplett selbst, heißt du vererbst es dir von dem Control = Inherits Control
    Dann kannst du im OnPaint Event komplett alles selbst malen.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    1. so dämlich/seltsam es auch klingen mag aber auch control bietet mir nicht das onpaint event. ich verwende das normale paint event. Gibt es dazwischen unterschiede?
    2. egal ob mit oder ohne e.Graphics.Clear() er zeichnet mir weiterhin dieses Recheck ?( ?(

    danke für eure geduld mit mir :D .

    8-) faxe1008 8-)
    @faxe1008

    Schau mal ein Beispiel:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class ProgressBar
    3. Inherits System.Windows.Forms.ProgressBar
    4. Public Sub New()
    5. MyBase.New()
    6. MyBase.SetStyle(ControlStyles.UserPaint, True)
    7. MyBase.SetStyle(ControlStyles.DoubleBuffer, True) '
    8. MyBase.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    9. End Sub
    10. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    11. MyBase.OnPaint(e)
    12. e.Graphics.Clear(Me.BackColor)
    13. 'Optional for animation
    14. With e.Graphics
    15. .SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    16. .TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
    17. .PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
    18. .InterpolationMode = Drawing2D.InterpolationMode.HighQualityBilinear
    19. .CompositingQuality = Drawing2D.CompositingQuality.HighQuality
    20. End With
    21. ' End Optional
    22. Dim HintergrundH As Integer = MyBase.ClientRectangle.Height
    23. Dim HintergrundB As Integer = MyBase.ClientRectangle.Width
    24. Dim Diff As Integer = MyBase.Maximum - MyBase.Minimum
    25. Dim BalkenH As Integer = MyBase.ClientRectangle.Height
    26. Dim BalkenB As Integer = CInt((HintergrundB / Diff) * Value)
    27. e.Graphics.FillRectangle(Brushes.DodgerBlue, 0, 0, BalkenB, BalkenH)
    28. e.Graphics.DrawRectangle(Pens.Silver, 0, 0, Me.Width - 1, Me.Height - 1)
    29. End Sub
    30. End Class


    Von Control erben würde ich nicht, da du dann alles selber machen musst. (fast alles)
    @faxe1008
    Noch ein kleines Feature was ich mal gefunden habe:

    VB.NET-Quellcode

    1. Dim glasTop As Color = Color.FromArgb(100, 255, 255, 255)
    2. Dim glasBottom As Color = Color.FromArgb(40, 255, 255, 255)
    3. Dim glass As New LinearGradientBrush(New Point(0, 0), New Point(0, BalkenH), glasTop, glasBottom)
    4. e.Graphics.FillRectangle(glass, 0, 0, BalkenB, CInt(BalkenH / 3))
    Bilder
    • progressbar.png

      417 Byte, 271×35, 155 mal angesehen
    hm, jetzt bin ich zu spät, aber hier noch mit dem richtigen Event:

    VB.NET-Quellcode

    1. Public Class Class1
    2. Inherits ProgressBar
    3. Protected Overrides Sub OnPaintBackground(pevent As System.Windows.Forms.PaintEventArgs)
    4. 'MyBase.OnPaintBackground(pevent)
    5. pevent.Graphics.Clear(Color.Red)
    6. End Sub
    7. Public Sub New()
    8. Me.SetStyle(ControlStyles.UserPaint, True)
    9. End Sub
    10. End Class

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    faxe1008 schrieb:

    Du hättest mir nur das event posten können

    vlt. dieses Buch lesen (hingegen das Galileio-Openbook ist Mist), um den Unterschied und den Zusammenhang zu verstehen zwischen Overrides-Methode und Event. Nur soviel: Eine Overrides-Methode ist kein Event.

    oder gugge Alles über Events, da ist das auch gegen Ende erwähnt.