Laden...

Hintergrundfarbe von Textbox kurzzeitig ändern (und dann wieder zurück oder nochmal anders)

Erstellt von lnino vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.185 Views
Thema geschlossen
L
lnino Themenstarter:in
24 Beiträge seit 2010
vor 12 Jahren
Hintergrundfarbe von Textbox kurzzeitig ändern (und dann wieder zurück oder nochmal anders)

Hi an alle.

Ich würde gern für einen Test beim Form_load die Hintergrundfarbe eine Textbox ändern. Aber leider sehe ich die Änderung nicht. Nur die letzte Farbe.

tb.BackColor = Color.Blue;
            Application.DoEvents();
            System.Threading.Thread.Sleep(500);
            tb.BackColor = Color.Yellow;
            Application.DoEvents();

Wie kriege ich das hin, dass ich die Änderung mitbekomme und was ist der Grund dafür, dass ich das nicht sehe?

Vielen Dank.

16.807 Beiträge seit 2008
vor 12 Jahren

Wahrscheinlich liegt es an Warum DoEvents Mist ist!
In diesem Fall auch sehr einfach per Timer lösbar; ohne Threads.

193 Beiträge seit 2007
vor 12 Jahren

Hallo,

warum willst du eine Farbänderung im Form Load Event machen.

Sichtbar wird es ja eh erst im Form Shown Event;

Wenn Du es mit einem Thread machen willst kannst du es so machen:


private void FormMain_Shown(object sender, EventArgs e)
        {
            this.textBoxColorChange.BackColor = Color.Green;
            System.Threading.Thread t = new System.Threading.Thread(delegate(object o)
            {
                System.Threading.Thread.Sleep(2000);
                this.Invoke((MethodInvoker)delegate
                     {
                         this.textBoxColorChange.BackColor = Color.Yellow;
                     });                
            });
            t.Start();
        }

**:::{style="color: darkblue;"}If debugging is the process of removing bugs, then programming must be the process of putting them in.){darkblue}** Dijkstra
5.742 Beiträge seit 2007
vor 12 Jahren

Wenn Du es mit einem Thread machen willst kannst du es so machen

Sollte man aber definitiv nicht so machen - ein Timer ist deutlich besser.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo lnino,

im Grunde ist - wenn schon nicht die Frage, so doch die Lösung - nur eine Variante von [FAQ] Warum blockiert mein GUI? Und wie schon gesagt, ist das ein Fall für einen (System.Windows.Forms.)Timer.

Du solltest dich unbedingt darauf einlassen, dass Windows Forms ereignisgesteuert ist! Und nicht versuchen, längere Abläufe in einem EventHandler zu programmieren. Generell sollte man im GUI-Thread nicht warten, schon gar nicht länger als 1/20s. Und man sollte - wie gesagt - von DoEvents die Finger lassen.

Dass Windows Forms Anwendungen ereignisgesteuert aufgebaut werden müssen, gehört zu den elementaren Grundlagen von Windows Forms. Beachte daher bitte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

Thema geschlossen