Fragensteller
Kann label nicht ändern?!

Allgemeine Diskussion
-
HI leute hab volgendes Problem ich glaube es ist am besten wenn ich einfach ein Auschnitt meines codes hinein kopiere:
label1.Text = "Aus"; label1.BackColor = Color.Silver; System.Threading.Thread.Sleep(500); label1.Text = "Ein"; label1.BackColor = Color.Yellow; System.Threading.Thread.Sleep(500); label1.Text = "Aus"; label1.BackColor = Color.Silver;
das ganze event wird durch ein Button ausgeführt; wenn ich drücke schneidet mir es den Label so halb ab aber ändert nicht die Farbe geschweige den Text. Es soll nämlich quasi blinken- Typ geändert Ciprian Bogdan Montag, 3. Februar 2014 17:22 keine Rückmeldung des Fragestellenden
Alle Antworten
-
Hallo,
das Problem besteht darin, dass das Fenster sich nur aktualisiert, wenn im Hintergrund kein Code mehr läuft. Darum musst du deinen Code in einen 2. Thread verpacken. Über die Invoke-Methode kannst du dann auf die Controls zugreifen:var t = new System.Threading.Thread(() => { this.Invoke(new Action(() => { label1.Text = "Aus"; label1.BackColor = Color.Silver; })); System.Threading.Thread.Sleep(500); this.Invoke(new Action(() => { label1.Text = "Ein"; label1.BackColor = Color.Yellow; })); System.Threading.Thread.Sleep(500); this.Invoke(new Action(() => { label1.Text = "Aus"; label1.BackColor = Color.Silver; })); }); t.Start(); }
Alles was in Invoke steht, wird synchron zum GUI-Thread ausgeführt. D.h. das man in dem Moment nicht mit dem Fenster interagieren kann. Die Form "friert ein".
PS: Wenn es noch öfter "blinken" soll, würde ich den Code in eine Schleife packen.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke. -
Hallo,
da passiert nichts, weil der Steuerelement nicht neu gezeichnet wird und Du den (GUI)-Thread schlafen legst, der es eigentlich tun würde.
Anstatt eines Thread.Sleep verwende besser einen Timer und ändere den Inhalte im Tick Ereignis:
bool labelState = false; // interner status private void timer1_Tick(object sender, EventArgs e) { if (!labelState) { label1.Text = "Aus"; label1.BackColor = Color.Silver; } else { label1.Text = "Ein"; label1.BackColor = Color.Yellow; } labelState = !labelState; // Umschalten (ggf. auch/nur extern) }
Mit einem Interval von 500 ms sollte es dann "flackern" ;)
Gruß Elmar
-
Hi Julian,
Konntest Du mit den dargestellenten Lösungen weiterkommen ? Falls ja, markiere bitte die hilfreiche Antwort.
Gruß,
Ciprian
Ciprian Bogdan, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
*****************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
*****************************************************************************************************
Ciprian Bogdan, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.