Da die vorherigen Antworten nicht mit visuellen Stilen zu funktionieren scheinen. Sie müssen wahrscheinlich Ihre eigene Klasse erstellen oder den Fortschrittsbalken erweitern:
public class NewProgressBar : ProgressBar
{
public NewProgressBar()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
Rectangle rec = e.ClipRectangle;
rec.Width = (int)(rec.Width * ((double)Value / Maximum)) - 4;
if(ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawHorizontalBar(e.Graphics, e.ClipRectangle);
rec.Height = rec.Height - 4;
e.Graphics.FillRectangle(Brushes.Red, 2, 2, rec.Width, rec.Height);
}
}
BEARBEITEN: Der Code wurde aktualisiert, damit der Fortschrittsbalken den visuellen Stil für den Hintergrund verwendet
OK, ich habe eine Weile gebraucht, um alle Antworten und Links zu lesen. Folgendes habe ich aus ihnen herausgeholt:
Probenergebnisse
Die akzeptierte Antwort deaktiviert visuelle Stile. Sie können die Farbe auf alles einstellen, was Sie möchten, aber das Ergebnis sieht einfach aus:
Mit der folgenden Methode können Sie stattdessen so etwas erhalten:
Wie man
Fügen Sie dies zunächst hinzu, wenn Sie nicht:
using System.Runtime.InteropServices;
Zweitens können Sie entweder diese neue Klasse erstellen oder ihren Code in eine vorhandene
static
nicht generische Klasse einfügen :Um es zu verwenden, rufen Sie einfach an:
progressBar1.SetState(2);
Beachten Sie den zweiten Parameter in SetState, 1 = normal (grün); 2 = Fehler (rot); 3 = Warnung (gelb).
Ich hoffe es hilft!
quelle
public const uint PBM_SETSTATE = 0x0410; // 1040
Dies ist eine flimmerfreie Version des am meisten akzeptierten Codes, den Sie als Antwort auf diese Frage finden können. Alle Ehre gebührt den Plakaten dieser fetten Antworten. Danke Dusty, Chris, Matt und Josh!
Wie die Anfrage von "Fueled" in einem der Kommentare brauchte ich auch eine Version, die sich etwas professioneller verhält. Dieser Code behält Stile wie im vorherigen Code bei, fügt jedoch eine Offscreen-Bildwiedergabe und Grafikpufferung hinzu (und entsorgt das Grafikobjekt ordnungsgemäß).
Ergebnis: alles Gute und kein Flackern. :) :)
quelle
Im Designer müssen Sie nur die ForeColor-Eigenschaft auf die gewünschte Farbe festlegen. Im Fall von Rot gibt es eine vordefinierte Farbe dafür.
Um dies im Code (C #) zu tun, gehen Sie wie folgt vor:
Bearbeiten : Oh ja, setzen Sie auch den Stil auf kontinuierlich. Im Code wie folgt:
Noch eine Änderung: Sie müssen auch die Zeile entfernen, die
Application.EnableVisualStyles()
von IhremProgram.cs
(oder ähnlichem) liest . Wenn Sie dies nicht tun können, weil der Rest der Anwendung visuelle Stile haben soll, würde ich empfehlen, das Steuerelement selbst zu malen oder zu WPF überzugehen, da dies mit WPF einfach ist. Sie finden ein Tutorial zum Eigentümer, der einen Fortschrittsbalken in Codeplex zeichnetquelle
Mit den Antworten von Matt Blaine und Chris Persichetti habe ich einen Fortschrittsbalken erstellt, der ein bisschen schöner aussieht und gleichzeitig eine unendliche Farbauswahl ermöglicht (im Grunde habe ich eine Zeile in Matts Lösung geändert):
ProgressBarEx:
Verwendung:
Ergebnisse
Herunterladen
https://skydrive.live.com/?cid=0EDE5D21BDC5F270&id=EDE5D21BDC5F270%21160&sc=documents#
quelle
LinearGradientBrush
die Aufzeichnungsbreite als 0 gelesen wird. Die einfachste Lösung besteht darin, das "Auffüllen" von 4px im Code nicht durchzuführen und ihn stattdessen einzufügen ein Panel oder etwas mit Polsterung (wenn Sie einen Rand wollen) und machenrec.Width = (int)((rec.Width * scaleFactor) - 4)
inrec.Width = (int)(rec.Width * scaleFactor) + 1
Änderung der Antwort von Dustyburwell. (Ich habe nicht genug Mitarbeiter, um es selbst zu bearbeiten.) Wie seine Antwort funktioniert es mit aktivierten "Visual Styles". Sie können einfach die ForeColor-Eigenschaft des Fortschrittsbalkens in der Entwurfsansicht eines beliebigen Formulars festlegen.
quelle
Ich habe das einfach in eine statische Klasse eingeordnet.
Ich hoffe es hilft,
Marc
quelle
Normalerweise ist der Fortschrittsbalken entweder thematisch oder berücksichtigt die Farbeinstellungen des Benutzers. Um die Farbe zu ändern, müssen Sie entweder die visuellen Stile deaktivieren und festlegen
ForeColor
das Steuerelement selbst oder zeichnen.Für den fortlaufenden Stil anstelle von Blöcken können Sie die
Style
Eigenschaft festlegen :quelle
BEARBEITEN
Nach den Geräuschen der Dinge verwenden Sie das XP-Theme mit der auf grünen Blöcken basierenden Prog-Bar. Versuchen Sie, Ihren UI-Stil auf Windows Classic umzustellen und erneut zu testen. Möglicherweise müssen Sie jedoch Ihr eigenes OnPaint-Ereignis implementieren, damit es für alle UI-Stile das tut, was Sie möchten
Oder deaktivieren Sie, wie bereits erwähnt, die VisualStyles für Ihre Anwendung.
Original
Soweit ich weiß, erfolgt das Rendern des Fortschrittsbalkens in Übereinstimmung mit dem von Ihnen gewählten Windows-Designstil (win2K, xp, vista).
Sie können die Farbe ändern, indem Sie die Eigenschaft festlegen
Ich bin mir nicht sicher, ob Sie noch viel mehr können ...
googelt ein bisschen
Hier ist ein Artikel von MS KB über das Erstellen eines "glatten" Fortschrittsbalkens
http://support.microsoft.com/kb/323116
quelle
Versuchen Sie es mit der Nachricht PBM_SETBARCOLOR, die mit SendMessage den Trick machen sollte
Ein Beispiel finden Sie unter http://www.vbforums.com/showthread.php?t=248721 .
quelle
Alle diese Methoden funktionieren bei mir nicht, aber mit dieser Methode können Sie sie in eine Farbzeichenfolge ändern.
Bitte beachten Sie, dass ich diesen Code von irgendwo anders auf StackOverflow gefunden und ein wenig geändert habe. Ich habe seitdem vergessen, wo ich diesen Code gefunden habe und kann ihn deshalb nicht verlinken. Tut mir leid.
Aber trotzdem hoffe ich, dass dieser Code jemandem hilft, der mir wirklich geholfen hat.
Wenn der Name "ProgressBar" verwendet wird, ersetzen Sie ihn durch Ihren eigenen Fortschrittsbalkennamen. Sie können dieses Ereignis auch mit anderen Argumenten auslösen. Stellen Sie nur sicher, dass sich die Klammern irgendwo befinden.
quelle
Änderung
Color
undValue
(sofortige Änderung)Setzen Sie
using System.Runtime.InteropServices;
oben ...Rufen Sie an mit
ColorBar.SetState(progressBar1, ColorBar.Color.Yellow, myValue);
Ich habe festgestellt, dass sich der Wert des Balkens (wie groß er ist) nicht ändert, wenn er eine andere Farbe als das Standardgrün hat. Ich habe den Code von user1032613 genommen und eine Wertoption hinzugefügt.
quelle
pBar.Value = pBar.Maximum;
und unsSendMessage(pBar.Handle, 1040, (IntPtr)(int)Color.Green, IntPtr.Zero);
innerhalb des Zustandskörpers befinden, damit der Fortschritt die richtige neue Farbe zeigte.Nur für den Fall, dass jemand nach einer anderen Option sucht ... Sie können ein Bedienfeld erweitern, es als Hintergrund verwenden (weiß oder was auch immer) und ein weiteres Bedienfeld für den Vordergrund (die bewegliche Leiste) hinzufügen. Dann haben Sie die volle Kontrolle über das Ändern der Farbe usw.
quelle
Klicken Sie einfach mit der rechten Maustaste auf Ihr Projekt in Visual Basic Solution Explorer (wo sich Ihre vb-Dateien befinden) und wählen Sie Eigenschaften aus dem Menü aus. Deaktivieren Sie im daraufhin angezeigten Fenster die Option "XP-Stile aktivieren". Wenn Sie jetzt die Vorfarbe festlegen, sollte dies jetzt funktionieren.
quelle
:Οеу: Quote: Normalerweise ist der Fortschrittsbalken entweder thematisch oder berücksichtigt die Farbeinstellungen des Benutzers. Um die Farbe zu ändern, müssen Sie entweder die visuellen Stile deaktivieren und festlegen
ForeColor
das Steuerelement selbst oder zeichnen.Für den fortlaufenden Stil anstelle von Blöcken können Sie die
Style
Eigenschaft festlegen :ProgressBarStyle.Continuous versus Blocks ist bei aktivierten VistualStyles unbrauchbar ...
Block (s) funktionieren nur mit deaktivierten visuellen Stilen ... was all dies zu einem strittigen Punkt macht (in Bezug auf die benutzerdefinierte Fortschrittsfarbe). Wenn deaktivierte visuelle Stile ... sollte der Fortschrittsbalken basierend auf der Vorfarbe gefärbt sein.
Ich habe eine Kombination aus William Daniels Antwort (mit aktivierten visuellen Stilen, damit die ForeColor nicht nur flach und ohne Stil ist) und Barrys Antwort (auf benutzerdefinierten Text in der Fortschrittsleiste) verwendet: Wie füge ich Text in ProgressBar ein?
quelle
Vertikale Leiste UP For Down in roter Farbe:
quelle
Die farbige Fortschrittsleiste von VB.Net, die die Antwort von WXP Visual Styles berücksichtigt, lautet ...
Ich habe mit der Antwort von 'user1032613' am 17.03.12 begonnen. Beachten Sie, dass dies jetzt ein Modul ist, keine Klasse. Von dort habe ich den Code konvertiert, aber es wurde mehr benötigt. Insbesondere zeigte der konvertierte Code eine DirectCast-Funktion zum Konvertieren der Ganzzahl 'state' in einen IntPtr-Typ, der nicht funktionierte.
Und wieder rufen Sie dies einfach im using-Code mit dieser Zeile auf:
Übrigens - ich habe andere Farben ausprobiert - 0, 4, 5 - sie haben alle nur grün angezeigt.
quelle
Ich weiß, dass es viel zu alt ist, um jetzt beantwortet zu werden. Aber dennoch eine kleine Änderung an @ Daniels Antwort, um das Problem zu beheben, dass kein nullwertiger Fortschrittsbalken angezeigt wird. Zeichnen Sie den Fortschritt nur, wenn festgestellt wird, dass die Breite des inneren Rechtecks ungleich Null ist.
Vielen Dank an alle Mitwirkenden.
quelle
Ich fand, dass dies durch Zeichnen eines Rechtecks innerhalb des Fortschrittsbalkens und Festlegen der Breite entsprechend dem aktuellen Wert des Fortschritts erreicht werden kann. Ich habe auch Unterstützung für den Fortschritt von rechts nach links hinzugefügt. Auf diese Weise müssen Sie das Bild nicht verwenden, und da Rectnalge.Inflate nicht genannt wird, ist das gezeichnete Rechteck kleiner.
quelle
Ich denke, dass die einfachste Lösung von allen nur eine schnelle Lösung ist, aber Sie können die Application.EnableVisualStyles () aus Program.cs löschen, kommentieren oder wie auch immer Sie den Teil benennen, der die Hauptfunktion enthält. Danach können Sie die Farbe des Fortschrittsbalkens mit progressBar.ForeColor = Color.TheColorYouDesire frei ändern.
quelle
Bearbeiten: In den beiden Minuten brauchte ich, um vs zu starten und die Syntax zu überprüfen, mit der ich geschlagen wurde, mit viel besseren Antworten. Ich liebe diese Seite.
quelle