Eignene ProgressBar "Designen"

  • VB.NET
  • .NET (FX) 4.0

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

    Jason schrieb:

    eigene ProgressBars
    Mach Dir eine Klasse, lass sie von PictureBox erben, gib ihr die Properties Minimum, Maximum, Value und das Paint-Event, in dem Du das ganze künstlerisch umsetzt.
    Feddich.
    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!

    nafets schrieb:

    PictureBox
    Es muss nur gemalt werden, sonst nix.
    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!
    -> Wie erstelle ich eine eigene ProgressBar sauber und flüssig?

    ---

    Bei mir werden die Imports Grün unterstrichen.

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Windows.Forms 'Dies brauchen wir für das "Control", da dies zu Windows.Forms gehört
    3. Imports System.Drawing 'Brauchen wir für GDI+
    4. Imports System.Drawing2D 'Brauchen wir für Brushes etc.
    5. Imports System.Drawing.Text 'Brauchen wir für TextRendering​


    Warum?

    Jason schrieb:

    Warum?
    Ist das ne DLL?
    Da musst Du die entsprechenden Verweise hinzufügen, schreib sie von einer WinForms-Anwendung ab.
    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!
    Achso :D
    Ja das ist ein DLL.

    ---

    Ich kann keinen Verweis für Imports System.Drawing2D finden.
    Ich kann den nur durch System.Drawing.Drawing2D ersetzen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Jason“ ()

    An welche Stelle im Code müssen die Properties eingefügt werden?

    VB.NET-Quellcode

    1. Dim max As Integer = 100
    2. <Category("Werte")>
    3. Public Property Maximum() As Integer
    4. Get
    5. Return max
    6. End Get
    7. Set(ByVal value As Integer)
    8. max = value
    9. Me.Invalidate()
    10. End Set
    11. End Property
    12. Dim min As Integer = 0
    13. <Category("Werte")>
    14. Public Property Minimum() As Integer
    15. Get
    16. Return min
    17. End Get
    18. Set(ByVal value As Integer)
    19. min = value
    20. Me.Invalidate()
    21. End Set
    22. End Property
    23. Dim val As Integer = 70
    24. <Category("Werte")>
    25. Public Property Value() As Integer
    26. Get
    27. Return val
    28. End Get
    29. Set(ByVal value As Integer)
    30. val = value
    31. Me.Invalidate()
    32. End Set
    33. End Property
    Das ist so gesehen komplett egal, ich würde sie aber oben hinterlegen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich bekomme in der Zeile einen Fehler.
    Dim Balkenfarbe As Color = Me.BalkenColor


    VB.NET-Quellcode

    1. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    2. MyBase.OnPaint(e)
    3. With e.Graphics
    4. .SmoothingMode = SmoothingMode.HighQuality
    5. .TextRenderingHint = TextRenderingHint.AntiAlias
    6. .PixelOffsetMode = PixelOffsetMode.HighQuality
    7. .InterpolationMode = InterpolationMode.HighQualityBilinear
    8. .CompositingQuality = CompositingQuality.HighQuality
    9. Dim HintergrundHoehe As Integer = MyBase.ClientRectangle.Height
    10. 'Die Höhe des Hintergrunds
    11. Dim HintergrundBreite As Integer = MyBase.ClientRectangle.Width
    12. 'Die Breite des Hntergrunds
    13. Dim BalkenHoehe As Integer = CInt(MyBase.ClientRectangle.Height)
    14. 'Die Höhe des Balken (entspricht der Höhe des Hintergrunds)
    15. Dim BalkenBreite As Integer = Width * (Value - Minimum) \ (Maximum - Minimum)
    16. 'Die Value ändert sich dann immer und das Ganze wird neu berechnet, sodass der Balken länger wird
    17. Dim Hintergrundfarbe As Color = Color.White
    18. 'Wir setzen die Hintergrundfarbe auf weiß. (benutzerdefiniert)
    19. Dim Balkenfarbe As Color = Me.BalkenColor
    20. 'Wir setzen die Balkenfarbe auf grün (benutzerdefiniert)
    21. Dim hintergrundrect As New Rectangle(0, 0, HintergrundBreite, HintergrundHoehe)
    22. 'Wir erstellen ein neues Rectangle mit der Location (0,0) und den Werten der oben deklarierten Variablen
    23. .FillRectangle(New SolidBrush(Hintergrundfarbe), hintergrundrect)
    24. 'Wir füllen das Rectangle mit einer SolidBrush (festen Farbe)
    25. Dim balkenrect As New Rectangle(0, 0, BalkenBreite, BalkenHoehe)
    26. 'Wir erstellen ein neues Rectangle für den Balken mit der Location (0,0) und den Werten der oben deklarierten Variablen
    27. .FillRectangle(New SolidBrush(Balkenfarbe), balkenrect)
    28. 'Wir füllen das Rectangle wieder mit einer SolidBrush (festen Farbe)
    29. End With
    30. End Sub
    So, Die DLL ist jetzt fertig.
    Ist der Code so korrekt?

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Windows.Forms 'Dies brauchen wir für das "Control", da dies zu Windows.Forms gehört
    3. Imports System.Drawing 'Brauchen wir für GDI+
    4. Imports System.Drawing.Drawing2D 'Brauchen wir für Brushes etc.
    5. Imports System.Drawing.Text 'Brauchen wir für TextRendering
    6. Imports System.ComponentModel
    7. Public Class ProgBarDES
    8. Inherits Control
    9. Dim max As Integer = 100
    10. <Category("Werte")>
    11. Public Property Maximum() As Integer
    12. Get
    13. Return max
    14. End Get
    15. Set(ByVal value As Integer)
    16. max = value
    17. Me.Invalidate()
    18. End Set
    19. End Property
    20. Dim min As Integer = 0
    21. <Category("Werte")>
    22. Public Property Minimum() As Integer
    23. Get
    24. Return min
    25. End Get
    26. Set(ByVal value As Integer)
    27. min = value
    28. Me.Invalidate()
    29. End Set
    30. End Property
    31. Dim val As Integer = 70
    32. <Category("Werte")>
    33. Public Property Value() As Integer
    34. Get
    35. Return val
    36. End Get
    37. Set(ByVal value As Integer)
    38. val = value
    39. Me.Invalidate()
    40. End Set
    41. End Property
    42. Public Sub New()
    43. MyBase.New()
    44. SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint Or ControlStyles.ResizeRedraw, True)
    45. UpdateStyles()
    46. Me.DoubleBuffered = True
    47. Me.SuspendLayout()
    48. Me.ResumeLayout(False)
    49. End Sub
    50. #Region "properties"
    51. #End Region
    52. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    53. MyBase.OnPaint(e)
    54. With e.Graphics
    55. .SmoothingMode = SmoothingMode.HighQuality
    56. .TextRenderingHint = TextRenderingHint.AntiAlias
    57. .PixelOffsetMode = PixelOffsetMode.HighQuality
    58. .InterpolationMode = InterpolationMode.HighQualityBilinear
    59. .CompositingQuality = CompositingQuality.HighQuality
    60. Dim HintergrundHoehe As Integer = MyBase.ClientRectangle.Height
    61. 'Die Höhe des Hintergrunds
    62. Dim HintergrundBreite As Integer = MyBase.ClientRectangle.Width
    63. 'Die Breite des Hntergrunds
    64. Dim BalkenHoehe As Integer = CInt(MyBase.ClientRectangle.Height)
    65. 'Die Höhe des Balken (entspricht der Höhe des Hintergrunds)
    66. Dim BalkenBreite As Integer = Width * (Value - Minimum) \ (Maximum - Minimum)
    67. 'Die Value ändert sich dann immer und das Ganze wird neu berechnet, sodass der Balken länger wird
    68. Dim Hintergrundfarbe As Color = Color.White
    69. 'Wir setzen die Hintergrundfarbe auf weiß. (benutzerdefiniert)
    70. Dim Balkenfarbe As Color = Color.Green ' <<<<<< FEHLER WAR HIER! <<<<<<
    71. 'Wir setzen die Balkenfarbe auf grün (benutzerdefiniert)
    72. Dim hintergrundrect As New Rectangle(0, 0, HintergrundBreite, HintergrundHoehe)
    73. 'Wir erstellen ein neues Rectangle mit der Location (0,0) und den Werten der oben deklarierten Variablen
    74. .FillRectangle(New SolidBrush(Hintergrundfarbe), hintergrundrect)
    75. 'Wir füllen das Rectangle mit einer SolidBrush (festen Farbe)
    76. Dim balkenrect As New Rectangle(0, 0, BalkenBreite, BalkenHoehe)
    77. 'Wir erstellen ein neues Rectangle für den Balken mit der Location (0,0) und den Werten der oben deklarierten Variablen
    78. .FillRectangle(New SolidBrush(Balkenfarbe), balkenrect)
    79. 'Wir füllen das Rectangle wieder mit einer SolidBrush (festen Farbe)
    80. End With
    81. End Sub
    82. End Class​

    Jason schrieb:

    VB.NET-Quellcode

    1. MyBase.OnPaint(e)
    ist nicht nötig.
    Wieso läuft dieser Code:

    VB.NET-Quellcode

    1. Me.ProgBarDES1.Value = Me.ProgBarDES1.Maximum * 100
    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!
    ​DoubleBuffered = True brauchst Du nicht, da Du das bereits bei den Styles setzt.
    Außerdem ist da eine leere Region.

    Gib' zudem doch immer Fehlermeldungen an, da können wir doch nicht raten...
    Ich hoffe, Du hast das Ganze auch mal ein wenig zum Lernen verwendet und nicht nur abgeschrieben, das war nicht die Intention meines Tutorials. Das ist btw ziemlich alt und ich würde heute die Nomenklatur etwas ändern (englisch). Das solltest Du noch machen.

    ​CInt würde ich btw rauswerfen, denn das bringt nichts, ist ja bereits ein Integer​, keine Ahnung, was ich mir dabei gedacht hatte, wie gesagt, das war noch zu meinen VB-Zeiten...

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: