Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Positionswert eines bewegenden Labels in zweiten Label anzeigen
WesMPipes
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

Positionswert eines bewegenden Labels in zweiten Label anzeigen

beantworten | zitieren | melden

Hallo liebe Community

ich bin während meines Studiums noch ziemlich am Anfang mit der Entwicklung in c#.
Nach ein paar Konsolen-Anwendungen, mache ich nun die ersten Schritte in Windows-Forms.

Im Zuge einer bewerteten Aufgabe, soll ich ein Programm erstellen, wo ein Label mit beliebigen Inhalt in mehreren Durchläufen von oben nach unten "wandern" lassen soll. Ausgelöst durch den Klick auf einen Button. So weit so gut.

Ich habe ein Klick-Event erstellt und so wie es soll, läuft mein Label mehrmals von oben nach unten.

Mein Klick-Event sieht so aus:


private void btnStart_Click(object sender, EventArgs e)
        {

            for (int runde = 0; runde < 10; runde++)
            {
                for (int schritt = 0; schritt ≤ 300; schritt++)
                {

                    lblWander.Top = schritt;
                    System.Threading.Thread.Sleep(20);

                }
            }

            Close();

        }

Nun war meine Idee, dass ich den Labeltext nach jedem Schritt in die aktuellen Schritt-Wert ändere.
Also habe ich die "innere" Schleife noch um folgende Zeile erweitert:



lblWander.Text = Convert.ToString(schritt);



Ich hätte jetzt erwartet, dass bei jedem Schritt nach unten, sich im Label auch der Text ändert - macht er aber nicht - das Label wird "unsichtbar" und ich kann den Text nicht mehr sehen.

Erst wenn die Schleife durchlaufen und das Programm am Ende angekommen ist (den Aufruf der Close-Methode hab ich später erst reingebaut), wird dann im Label der letzte Wert von schritt (300) angezeigt.

Was muss noch passieren, damit ich die Änderung des Wertes auch während der Laufzeit im Label sehe?

Anmerkung: dass sich der Text im Label ändern muss, ist nicht Teil der Aufgabe und wird auch nicht bewertet. Ich habe es für mich eher als Fleißaufgabe gesehen. Und da ich es nicht verstehe, aber gerne verstehen möchte, bitte ich Euch um Versteh-Hilfe.

Vielen Dank
Gruß

Wes

PS: Ich hoffe das hier ist das "Anfänger-Forum" und der Post ist hier richtig - wenn nicht, bitte ich um Nachsicht.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von WesMPipes am .
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 706
Herkunft: OWL

beantworten | zitieren | melden

Hallo und willkommen WesMPipes,

schau mal hier: [FAQ] Warum blockiert mein GUI?

Edit:
Später könnte das hier auch noch interessant sein: [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pinki am .
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Du musst ein Neuzeichnen des Controls erzwingen.

Invalidate
Update
Refresh

Dass dein Form blockiert, hast du ja sicher bemerkt, dafür hilft dann pinkis Hinweis.

LaTino
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LaTino am .
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
WesMPipes
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Vielen Dank Euch beiden für Eure Antworten - ich werde mir das mal alles durchlesen.

Wobei beim Überfliegen des Blockier-Threads schon einige Fragezeichen aus meinem Kopf gesprudelt sind. Ich glaube, da greife ich meinem c#-Lehrgang etwas vor...

Grus
Wes
private Nachricht | Beiträge des Benutzers
steffen_dec
myCSharp.de - Member



Dabei seit:
Beiträge: 325

beantworten | zitieren | melden

Hallo,

probier mal ob du mit der Timer-Komponente (Windows.Forms.Timer) zurecht kommst. (hier kleines Tutorial dazu http://www.c-sharpcorner.com/UploadFile/mahesh/C-Sharp-timer/)
Dieser löst immer ein Ereignis aus wenn die eingestellte Zeit abgelaufen ist.

Gruß
Steffen
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von steffen_dec am .
private Nachricht | Beiträge des Benutzers
WesMPipes
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Also das mit der Refresh-Methode habe ich hinbekommen und Alles (ausser dass das Form noch blockiert) läuft so, wie ich es mir optisch vorgestellt habe. Danke @ LaTino

@ steffen_dec, @ pinki - Danke, das schau ich mir auch noch in Ruhe an.

Gruß

Wes
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Dank der nicht mehr ganz taufrischen async/await-Syntax ist das ganze sehr, sehr einfach zu schreiben (die Mechanik dahinter ist dagegen nicht ganz so simpel, aber Rom wurde auch nicht an einem Tag erbaut ;) ).

Ergänze deine Methode um das Schlüsselwort "async", ersetze System.Threading.Thread.Sleep(20) durch await Task.Delay(20); - und das war es.

LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
WesMPipes
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Zitat
LaTino
...
Ergänze deine Methode um das Schlüsselwort "async", ersetze System.Threading.Thread.Sleep(20) durch await Task.Delay(20); - und das war es.



Ich denke mal die Mechanik dahinter werde ich im Laufe meines Lehrgangs (hoffentlich) noch begreifen.
Bis dahin gebe Ich mich erst mal damit zufrieden, dass es perfekt funktioniert
Danke schön

Gruß
Wes
private Nachricht | Beiträge des Benutzers