Laden...

Eine Form aktualisieren

Erstellt von thejensman vor 16 Jahren Letzter Beitrag vor 16 Jahren 4.077 Views
T
thejensman Themenstarter:in
5 Beiträge seit 2007
vor 16 Jahren
Eine Form aktualisieren

Hallo!

Ich bin noch recht frisch bei C# ... und komme grad einfach nicht weiter, weder mit googeln, noch mit der forumssuche hier...

und zwar möchte ich einfach nur ein countdown realisieren... dazu muss ja die form aktualisiert werden, weil sich sonst nichts tut. ich habe das folgendermaßen gemacht. das funktioniert auch ansich ....


lbl_countdown.Text = "3";
Form.ActiveForm.Update();

Thread.Sleep(1000);
lbl_countdown.Text = "2";
Form.ActiveForm.Update();
             
Thread.Sleep(1000);
lbl_countdown.Text = "1";
Form.ActiveForm.Update();

Thread.Sleep(1000);
lbl_countdown.Text = "go!";
Form.ActiveForm.Update();

das problem ist nur, wenn man während des countdowns auf den desktop klickt, die activeform also nicht mehr active ist g ... kommt eine fehlermeldung.

deshalb meine frage: wie kann ich meine form aktualisieren ohne den tag ".activeform."? und: gibt es generell eine bessere lösung die anzeigen zu aktualisieren?

vielen vielen Dank für die Antworten schon jetzt!

grüße jens.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo thejensman,

verwende kein Thread.Sleep im GUI-Thread. Verwende einen System.Windows.Forms.Timer. Siehe vor allem auch [FAQ] Warum blockiert mein GUI?

herbivore

A
254 Beiträge seit 2007
vor 16 Jahren

Hi,

ich würde den Timer (ist in der Toolboox vorhanden, einfach auf Form ziehen) benutzen. Ist sicherlich wesentlich einfacher.

Tschüss

T
thejensman Themenstarter:in
5 Beiträge seit 2007
vor 16 Jahren

hallo,

danke erstmal. okay, werd mich mal dran machen, dass mit dem timer zu realisieren ...

hab' zwischenzeitlich aber auch etwas gefunden, wo es zumindest so funktioniert ...

statt

Form.ActiveFor.Update()

nehm ich jetzt

Application.DoEvents();

dann gehts das zumindest mal, aber jetzt schau mich mal, wie ich mit den timers zurecht komm...

wie würdet ihr das in diesem konkreten fall mit timern realisieren?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo thejensman,

aber selbst wenn du DoEvents verwendest, was laut FAQ nicht empfehlenswert ist, verstößt du immer noch gegen: "verwende kein Thread.Sleep im GUI-Thread." Timer sind hier die Lösung. Alles andere ist Mist.

herbivore

T
thejensman Themenstarter:in
5 Beiträge seit 2007
vor 16 Jahren

okay .... hmm, ich hab einfach keine ahnung, wie ich das sonst realisieren könnte ... war schon froh, dass es so wenigstens geklappt hat.

kannst du mir mal n paar codeschnippsel schreiben, als anregung? ich glaube sonst komm ich nich weiter ... also in bezug auf den sleep thread als auch das mit dem doEvents. ich würds gern besser machen, aber ich weiß nicht wie.

danke schon jetzt!!!

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo thejensman,

solche Codeschnipsel findest du fast immer in der :rtfm: Doku.

herbivore

T
thejensman Themenstarter:in
5 Beiträge seit 2007
vor 16 Jahren

;.-) ich weiß aber ich komm da einfach nicht weiter X(

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo thejensman,

ein Timer ist ja nun wirklich nichts geheimnisvolles. Das solltest du wirklich selber hin bekommen. Aber wenn widererwartend nicht, dann stell bitte konkrete Frage. Siehe [Hinweis] Wie poste ich richtig? Punkt 5.

herbivore

T
thejensman Themenstarter:in
5 Beiträge seit 2007
vor 16 Jahren

das glaube ich, aber wenn man's noch nie gemacht hat, ists irgendwie undurchschaubar... bin also deiner hilfe dankbar! 🙂

wie ersetze ich konkret bei

lbl_countdown.Text = "3";
Form.ActiveForm.Update();

Thread.Sleep(1000);
lbl_countdown.Text = "2";
Form.ActiveForm.Update();
             
Thread.Sleep(1000);
lbl_countdown.Text = "1";
Form.ActiveForm.Update();

Thread.Sleep(1000);
lbl_countdown.Text = "go!";
Form.ActiveForm.Update(); 

das

Thread.Sleep(1000);

mit "besserem" code á la timers ...

ich bin für die hilfe sehr dankbar!

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo thejensman,

siehe [Hinweis] Wie poste ich richtig? Punkt 4.

Wir sind ein Forum, das nicht alles vorbetet. Wir erwaten Eigeninitiaitve. Inwiefern hilft die das Codebeispiel aus der :rtfm: Doku nicht. Das löst doch genau dein Problem?

herbivore

1.665 Beiträge seit 2006
vor 16 Jahren

versuch sowas mal, so schwer ists ja doch nicht...
Hinweisen anstatt konkret helfen bringt einen Anfänger nicht weiter. Es ist doch immer wieder das selbe. Keiner liest sich doch wirklich die FAQ so genau durch, oder warum wird so gut wie jeder Neuling auf Threads wie 'Wie poste ich richtig?' verwiesen? Mich würde das nerven. Da gehört ne Umstellung.

public FormCountdown()
{
    InitializeComponent();

    this.countdownTimer.Interval = 1000;
    this.countdownTimer.Tick += new EventHandler(countdownTimer_Tick);
    this.countdownTimer.Start();
}

private System.Windows.Forms.Timer countdownTimer = new System.Windows.Forms.Timer();
private int count = 5;

private void countdownTimer_Tick(object sender, EventArgs e)
{
    label.Text = count--.ToString();
}
49.485 Beiträge seit 2005
vor 16 Jahren

Hallo JunkyXL,

Hinweisen anstatt konkret helfen bringt einen Anfänger nicht weiter.

doch, weil es Anfängern klar macht, dass sie selber etwas tun müssen, um Programmierung zu lernen.

Ihnen die Lösung vorzubeten bringt sie dagegen oft nicht weiter, weil viele den Code nur kopieren, ohne etwas zu lernen.

Ich habe nichts gegen Code-Beispiele (und deshalb habe ich ja auch auf eins verwiesen) und aus diesen können Anfänger auch was lernen, aber sie müssen eben lernen Code-Beispiel auf ihnen konkreten Fall selbst anzupassen.

Es ist doch immer wieder das selbe.

Natürlich, es gibt ja auch immer wieder neue Anfänger. Und deshalb muss man immer wieder neu auf die Möglichkeiten zur Selbsthilfe hinweisen.

Keiner liest sich doch wirklich die FAQ so genau durch, oder warum wird so gut wie jeder Neuling auf Threads wie 'Wie poste ich richtig?' verwiesen?

Die FAQ hat mit "Wie poste ich richtig?" nicht viel zu tun. Dass so gut wie jeder Neuling auf "Wie poste ich richtig?" verwiesen wird, stimmt auch nicht annähernd. Weit mehr Neulinge müssen nicht darauf verwiesen werden.

Mich würde das nerven. Da gehört ne Umstellung.

So wie du entscheidest, welche Hilfe du gerne geben willst, entscheide ich das auch. Ich denke, meine Hilfe ist besser und vor allem nachhaltiger als deine. Ich gebe meine Art der Hilfe nicht, um jemanden zu nerven - weder dich noch die Neulinge - sondern natürlich um zu helfen. Ich denke wie gesagt, dass meine Form der Hilfe die bessere ist. Auch wenn viele Anfänger im ersten Moment sicher deine Art der Hilfe mehr schätzen.

herbivore