[C#] Eigene ProgressBar (BG-Color veränderbar!)

06/18/2011 17:22 StridingGiant#1
Hallo,
ich möchte mal ein kleines Tutorials vorstellen, indem ich euch erläutere, wie ihr eine eigene ProgressBar erstellen könnt, dazu gehört dann auch die Hintergrundfarbe eurer Wahl - diese könnt ihr bei der Standard ProgressBar nicht verändern!

Im Voraus:
Ich arbeite mit Visual C# 2010 von Microsoft.

Schritt 1: Steuerelemente

Ihr braucht:
1x -> Button ("Button1")
1x -> Label ("Fortschritt:", Optional)
1x -> Panel (Breite auf 1 Pixel setzen, in den Eigenschaften; Hintergrundfarbe deiner Wahl)
1x -> Timer ("timer1")

Positionieren

Ich hab den Button in die mitte meiner Windows Forms Anwendung gesetzt.
Das Label habe ich links über dem Panel positioniert und dem Panel als BackColor ein dunkles blau zugewiesen!

Button-Code:

Jetzt geht ihr mit einem Doppelklick auf den Button in den Code des Buttons.
Mit einem Klick auf den Button soll der Timer gestartet werden!

Der Sourcecode dafür:
Code:
timer1.Start();
Timer Code:

Der Timer soll die Breite des Panels pro Sekunde um 1 erhöhen, dadurch wird das Panel zur ProgressBar - mit eurer eigenen Hintergrundfarbe!

Der Sourcecode dafür:
Code:
panel1.Width += 1;
Um der selbst erstellten ProgressBar einen "maximal-Wert" zuzuweisen, benutzen wir die If-Abfrage.

Der Code lautet wie folgt:
Code:
if (panel1.Width == 400)
{
       timer1.Stop();
}
In meinem Fall sind 400 Pixel breite des Panels der maximalWert, ihr müsst das dann natürlich an die Breite eures Programms anpassen - es würde zwar kein Fehler kommen, aber die ProgressBar würde ohne die if Abfrage ins unendliche laufen.

Das Tutorial habe ich wegen einigen Fragen wie z.B. "Wie ändere ich die Hintergrundfarbe meiner ProgressBar" geschrieben. Ich hoffe es ist soweit übersichtlich und hat euch geholfen :)

mfg
A.W.E.S.O.M - O
06/18/2011 17:39 xNopex#2
Quote:
dazu gehört dann auch die Hintergrundfarbe eurer Wahl -diese könnt ihr bei der Standard ProgressBar nicht verändern!
Könnte man schon:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Aber wer will das schon? Meistes sehen die Designs nachher eher amateurhafter, als besser aus...
06/18/2011 17:41 StridingGiant#3
Naja, es geht, ist aber umständlicher als diese Variante ;)
06/18/2011 17:48 xNopex#4
Quote:
Naja, es geht, ist aber umständlicher als diese Variante
Ich weiß nicht, ob sich der programmiertechnische Aufwand lohnt, sich eine eigene Progressbar-Klasse zu programmieren, nur weil man die Farben ändern möchte. V.a. da es Wege gibt die Standard-Progressbar auch "einzufärben", ohne dabei auf die Vorzüge des bereitgestellten Steuerelements verzichten zu müssen.
Man hat also die Qual der Wahl: Entweder man verzichtet auf Visual Styles und kann das standard Steuerelement beliebig "designen", oder man entwickelt eine im Vergleich zum standard Steuerelement, amateurhafte und sicherlich fehlerbehaftene Version. Die Klügste Lösung: Auf eigene Gestaltungen verzichten.

EDIT: Vllt kannst du ja mal ein Screenshot von deiner Progressbar reinstellen, dass man auch mal sieht, wie sie ausschaut.
06/21/2011 05:59 GotDamned#5
Ich wollte es gerade anmerken, wenn man das so macht wie von dir beschrieben verzichtet man auf die VisualStyles.
Und die will man ganz sicher nicht nach pogrammieren.

Zum fehlerbehafteten, wo bitte sollen da Fehler sein?
Du hast dein Panel und anstatt der Progressbar einen Wert zuzuweisen, erhöhst du die Größe des Panels.
Wer das nicht hin bekommt, bekommt auch keine Progressbar hin.

Allerdings würde ich 2 Panels verwednen
1 Panel würde quasi als Rahmen dienen, von dem man auch den Borderstyle schön einstellen könnte.
Das andere Panel würde einfach im ersten Panel liegen und hätte die Dock-Eigenschaft auf Fill gesetzt.
Und dann einfach nur vom 2ten Panel die Größe ändern.
Ganz nebenbei würde das Panel somit auch keine Programmteile überdecken können, da man ja nie mehr sieht, als das erste Panel zeigt.
06/22/2011 13:48 |R.o.x|#6
Gut das CSharp, VB.Net ähnelt, oder andersrum :D
Ist zwar sehr einfach, aber kann manchmal auch nützlich sein.
In VB.Net würde der Code so aussehen :
PHP Code:
  Dim Value 0
    
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
        Panel1
.Width 1
        Value 
0
        Timer1
.Start()

    
End Sub

    
Private Sub Timer1_Tick(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Timer1.Tick
        
If Not Panel1.Width 400 Then
            Panel1
.Width += 1
            Value 
+= 1
            Label1
.Text Value
        
Else
            
Timer1.Stop()

        
End If
    
End Sub

    
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        Label1
.Text Value
    End Sub

    
Private Sub Form1_Resize(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Resize
        Button1
.Size = New Size(Me.WidthMe.Height 15.6)
        
Label1.Location = New Point(Me.Width 100Me.Height 60)
        If 
Timer1.Enabled True Then
            Panel1
.Size = New Size(ValueMe.Height 1.5)
        Else
            
Panel1.Size = New Size(1Me.Height 1.5)
        
End If

    
End Sub 
09/26/2011 22:33 xXSaiuXx#7
:facepalm:

Wo steckt in diesem TuT der tiefere Sinn???
Ich finde, wenn man schon die Möglichkeit hat einen vordefinierten
Progressbar auszuwählen, dann sollte man dies auch tun.