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.


Anmelden zum Antworten