Fortschrittsbalken mit Prozentanzeige

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Fortschrittsbalken mit Prozentanzeige

    Hi.
    Eine kleine und simple Frage:
    Wie kriege ich es hin, die Prozentanzeige auf meinem Fortschrittsbalken (ProgressBar) anzuzeigen?

    Ich habe schon viele Methoden mit Labels versucht, aber immer wenn die dadrauf sind, ist ja diese hässliche Hintergrundfarbe da, und mit der Farbe Transparent geht es genauso wenig :/

    Weiß jemand, wie das geht?

    ~ Chris
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Für was solls den sein oder habe ich da was übersehen?^^

    EDIT:
    Das Hab ich auf meim rechner gefunden , Sorry grad kein plan für welches VB das is aber vllt hilfts ja^^




    Bastel Dir mal eine Form mit 3 Label ("lblVorne", "lblHinten" und "lblProzentanzeige" - und einem Timer ("Timer1").

    Platziere zunächst das lblHinten, in der Originalgröße der späteren Progressbar.
    Darüber legst du das Label lblVorne, welches in der Breite kleiner sein darf, wird eh auf 0 gesetzt. (Rechtsklick -> Vordergrund nicht vergessen)

    das Label lblProzentanzeige wird wiederum über beide Labels gelegt und in den Vordergrund gesetzt.

    Alle Farbeinstellungen, Schriftfarbe, Transparenz etc. werden beim Starten der Form initialisiert.

    (Der Fortschritt erfolgt hier Zeigesteuert, das mußt Du natürlich Deinem Auslöser anpassen)

    Und hier ist der Code:


    VB.NET-Quellcode

    1. Option Explicit
    2. '###############################################################################
    3. '### On Form Load... ###########################################################
    4. '###############################################################################
    5. Private Sub Form_Load()
    6. Form1.AutoRedraw = True
    7. 'Einstellungen für das 'hintere Label'
    8. lblHinten.BackColor = &HFFFFFF 'Weiß
    9. lblHinten.Caption = "" 'Text verwirrt nur
    10. 'Einstellungen für das 'hintere Label'
    11. lblVorne.BackColor = &HFF0000 'Blau
    12. lblVorne.Caption = "" 'Text verwirrt nur
    13. lblVorne.Width = 0 'Wir fangen ja bei 0 an
    14. 'Einstellungen für das Prozentlabel
    15. lblProzentanzeige.Alignment = 2 'Zentrierte Anzeige
    16. lblProzentanzeige.BackStyle = 0 'Transparenz
    17. lblProzentanzeige.Font.Bold = True 'Es folgen Schrifteinstellungen
    18. lblProzentanzeige.Font.Size = 14
    19. lblProzentanzeige.Font.Name = "Courier New"
    20. lblProzentanzeige.ForeColor = &HFF& 'Schriftfarbe "Knallrot"
    21. 'Timereinstellungen
    22. Timer1.Interval = 500 'Schrittweite 1/2 Sekunde
    23. End Sub
    24. '###############################################################################
    25. '### Timerroutine ##############################################################
    26. '###############################################################################
    27. Private Sub Timer1_Timer()
    28. '100 Sekunden sollen 100 % entsprechen, 0,5 Sekunden = 0,5%
    29. lblVorne.Width = lblVorne.Width + lblHinten.Width * 0.5 / 100
    30. lblProzentanzeige = CStr(CInt(lblVorne.Width * 100 / lblHinten.Width)) & " %"
    31. If lblVorne.Width >= lblHinten.Width Then
    32. Timer1.Enabled = False
    33. End If
    34. End Sub

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

    Ich habe das hier gerade mal geschrieben, gibt nur leider ein Problem: Die Prozentzahl wird hinter der ProgressBar angezeigt :P Ich weiß nicht, wie ich das lösen soll, aber hier ist auf jeden Fall der Code (funktioniert auch, kannst die Koordinaten der Prozentzahl ja verändern um es zu sehen).

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. timer1.enabled = True
    4. zeichne()
    5. End Sub
    6. Private Sub zeichne() 'Das ist die Funktion, die die Prozentzahl erneuert
    7. Dim g As Graphics = Graphics.FromHwnd(Me.Handle)
    8. Dim fnt As Font = New Font("Arial", 10)
    9. g.Clear(Me.BackColor)
    10. g.DrawString(pb1.Value.ToString & " %", fnt, Brushes.Black, pb1.Location.X + pb1.Width / 2 - 10, pb1.Location.Y + pb1.Height / 2 - 5)
    11. 'Hier wird die Zahl gezeichnet, die Koordinaten sind etwa die Mitte der Progressbar (müsstest -10 und -5 noch anpassen^^)
    12. End Sub
    13. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    14. If pb1.Value < 100 Then 'pb1 = ProgressBar1
    15. pb1.Value += 1
    16. zeichne()
    17. Else
    18. Timer1.Enabled = False
    19. End If
    20. End Sub
    21. End Class

    Viele Grüße

    KillerVirus

    //Edit: Mist, tobikubi war schneller mit der gleichen Idee :P
    Hi.
    Also stimmt, mit Paint geht das, nur seit wann hat eine Progressbar eine Paint-Methode?

    Sonst danke an die anderen, aber ich glaube mit der Paint-Methode ist das am einfachsten!

    ~ Chris
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Hi.
    Also ich habe es nun so gemacht:

    VB.NET-Quellcode

    1. Private Sub Ladebalken_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Ladebalken.Paint
    2. e.Graphics.DrawString(Ladebalken.Value & "%", New Font("MS Sans Serif", 9.75, FontStyle.Regular), Brushes.Black, New PointF(50,
    3. 4))
    4. End Sub


    Trotzdem wird auf dem Ladebalken keinerlei Text angezeigt :(

    ~ Chris
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Das liegt wohl daran, dass das Paint schon vor dem Zeichnen der progress bar aufgerufen wird.

    Du kannst allerdings auch die Text-Eigenschaft setzen:

    VB.NET-Quellcode

    1. Progressbar1.Text = CInt(ProgressBar1.Value / ProgressBar1.Maximum * 100).ToString


    Allerdings kommt da glaub ich ein Flackern, wenn der Wert geändert wird.

    Gruß
    ~blaze~
    Die is nur versteckt. ProgressBar irbt über RangeBase auch Control. Dadurch sind bestimte Events, Properties nicht mehr da(bzw. doch noch da aber versteckt)

    Beim ProgressBar entsteht das Flackern übrigens dadurch, dass er sich nach dem Aufruf des PaintEvents weiterhin neu zeichnet.(Sonst käme z.B. der Effekt unter Vista nicht zustande)
    Kann sein, dass der Code unter XP funktioniert.

    Edit: Zeichnen funktioniert deshalb nicht:

    VB.NET-Quellcode

    1. Public Shared Shadows Event Paint(ByVal e As System.Windows.Forms.PaintEventArgs)

    Damit werden die Events ausgeblendet - und somit auch die BaseEvents überschrieben.

    Gruß
    ~blaze~

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