Background-Farbe in Windows Forms arbeitet fehlerhaft
-
Eigentlich wollte ich eine schnelle Anzeige von Farben programmieren.
Das funktionierte nicht.
Darauf habe ich eine ganz einfache und "idiotensichere" Anzeige von Farben versucht:using System; using System.Drawing; using System.Windows.Forms; namespace W0038Farbenspiel { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void cmdFarbe_Click(object sender, EventArgs e) { BackColor = Color.FromArgb(0, 0, 255); for (int i = 0; i < 500000000; i++) ; BackColor = Color.FromArgb(255, 0, 0); for (int i = 0; i < 500000000; i++) ; BackColor = Color.FromArgb(0, 255, 0); } } }
Das Ergebnis ist, dass nur die letzte Hintergrundfarbe Grün angezeigt wird, die anderen beiden Farben (blau und rot) jedoch nicht. Woran könnte das liegen?
-
chicken25 schrieb:
Woran könnte das liegen?
Daran, daß deine
for
-Schleifen ersatzlos wegoptimiert werden, denn sie haben keinen Effekt.Wahrscheinlich willst Du Thread.Sleep Method.
-
Danke für den Tipp, aber mit Sleep funktioniert es auch nicht:
using System; using System.Drawing; using System.Threading; using System.Windows.Forms; namespace W0038Farbenspiel { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void cmdFarbe_Click(object sender, EventArgs e) { BackColor = Color.FromArgb(0, 0, 255); Thread.Sleep(2000); BackColor = Color.FromArgb(255, 0, 0); Thread.Sleep(2000); BackColor = Color.FromArgb(0, 255, 0); } } }
Die For-Schleifen im vorherigen Programm hatten durchaus eine Wirkung, das Programm wurde dadurch verzögert.
Danke!
-
Hilft
this.Refresh();
jeweils nach dem setzten der Farbe?
-
Danke, jetzt klappt's!!
using System; using System.Drawing; using System.Threading; using System.Windows.Forms; namespace W0038Farbenspiel { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void cmdFarbe_Click(object sender, EventArgs e) { BackColor = Color.FromArgb(0, 0, 255); this.Refresh(); Thread.Sleep(2000); BackColor = Color.FromArgb(255, 0, 0); this.Refresh(); Thread.Sleep(2000); BackColor = Color.FromArgb(0, 255, 0); } } }
Er zeigt jetzt die Farben Blau, Rot und Grün als Hintergrundfarben des Formulars an.