Laden...

Schleife - Ereignis - Warten auf Enterbetätigung

Erstellt von PascalD vor 9 Jahren Letzter Beitrag vor 9 Jahren 3.236 Views
Thema geschlossen
P
PascalD Themenstarter:in
3 Beiträge seit 2014
vor 9 Jahren
Schleife - Ereignis - Warten auf Enterbetätigung

Guten Tag,

seit ca. 4 Tagen versuche ich mir jetzt Visual C# beizubringen mit dem Buch "Richtig einsteigen! - Programmieren lernen mit Visual C# 2013".

Ich hab mich bisher bis S. 148/149 durchgeschlagen und stehe nun bei einer Übungsaufgabe vor einem Problem. Eigentlich soll es eine Lösung (dazu Tipps & Tricks) auf der Webseite des Buchautors geben, die sind aber nicht vorhanden.

Die Übungsaufgabe lautet "Schreiben Sie ein Programm, dass für die Zahlen 1 - 100 die Quadratzahlen berechnet und ausgibt".

Nun habe ich diese Schleife schon realisiert, was auch funktioniert. Nun sollen aber am Anfang nur die ersten 10 Quadratzahlen ausgegeben werden und erst nach weiteren Drücken des Buttons (der Schaltfläche) sollen die nächsten 10 angezeigt werden usw. usw.... bis die 100 erreicht sind.

Daran hänge ich nun und komme nicht weiter. Hab schon probiert und probiert, Google benutzt, dieses Forum gesucht aber ich finde nichts darüber. Die einzige Möglichkeit die ich gefunden habe ist über Console.Readline(); aber das ist nun leider nur für Konsolenanwendungen.

Ich hoffe mir kann jemand behilflich sein, da ich endlich weiter kommen will im Buch und diese Übungsaufgabe schaffen möchte.


private void button1_Click(object sender, EventArgs e)
{
  int i = 1;
  while (i <= 100)
   {
     textBox1.AppendText("Die Quadratzahl von " + i + " ist: " + (i * i) + "\n");
     i++;

     if (i % 10 == 1)
     // Hier komm ich nicht weiter!
   }
}

Mit freundlichen Grüßen
PascalD

16.834 Beiträge seit 2008
vor 9 Jahren

Ein Warten funktioniert hier nicht, da ansonsten das Formular mit "reagiert nicht" einfriert.
Du musst Dir in der Klasse den Zustand merken; nicht in einer einzelnen Methode.

Sprich der Button-Klick startet die Schleife für die ersten 10 Elemente.
Der Enter-Event anschließend die weiteren.

Alternativ kann man das auch in einen Thread auslagern; aber ich weiß nicht, worauf die Aufgabe aus ist.
[FAQ] Warum blockiert mein GUI?
[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

76 Beiträge seit 2008
vor 9 Jahren

A) Du musst dir die Variable i merken, möglicherweise über eine eigens angelegte Eigenschaft in der Form. Gib ihr aber einen schöneren Namen. Vielleicht soetwas, wie "ResultCount".

B) Im Click-Event des Buttons erstellst du nun 10 mal eine Schleife durchlaufen. Das geht am schönsten mit der FOR-Schleife. Wenn du aber die while-Schleife verwenden willst: Geht auch. [i = 0; while(i < 10)]. Nun prüfst du noch vorher, ob ResultCount < 100 ist. Wenn nicht, dann soll die Schleife nicht ausgeführt werden.

Allerdings sind das sehr grobe Grundlagen, die Moderatoren Posten dann oft den Artkel [Hinweis] Wie poste ich richtig? hier.

Grüße Dennis Z.

U
1.688 Beiträge seit 2007
vor 9 Jahren

Die Übungsaufgabe lautet "Schreiben Sie ein Programm, dass für die Zahlen 1 - 100 die Quadratzahlen berechnet und ausgibt".
...
Die einzige Möglichkeit die ich gefunden habe ist über Console.Readline(); aber das ist nun leider nur für Konsolenanwendungen.

Dann schreib doch eine Konsolenanwendung! In der Aufgabenstellung steht nichts Gegenteiliges.
Prinzipiell scheint mir die Anforderung, auf den Knopfdruck zu warten, für Winforms eher ungewöhnlich (auch, wenn es selbstverständlich so wie beschrieben funktionieren würde).

P
PascalD Themenstarter:in
3 Beiträge seit 2014
vor 9 Jahren

Dann schreib doch eine Konsolenanwendung! In der Aufgabenstellung steht nichts Gegenteiliges. Prinzipiell scheint mir die Anforderung, auf den Knopfdruck zu warten, für Winforms eher ungewöhnlich (auch, wenn es selbstverständlich so wie beschrieben funktionieren würde).

Das Buch geht nur um Windows Forms Anwendungen, daher denke ich, dass diese Übungsaufgabe auch dementsprechend gelöst werden soll & nicht als Konsolenanwendung.

Recht hast du natürlich, ich möchte aber auch die andere Variante gerne hinbekommen 😉

P
PascalD Themenstarter:in
3 Beiträge seit 2014
vor 9 Jahren

Könnte mir jemand eventuell mal eine verständliche Lösung dazu geben bitte? Wie ihr das genau meint mit euren Vorschlägen?

Das haut bei mir nicht hin, probiere nun schon seit Stunden alles aus.

Danach nerv ich auch nicht mehr 😉 Nur ich will damit jetzt endlich weiterkommen.

Hinweis von herbivore vor 9 Jahren

Aller Anfang ist schwer. Da hilft es nichts, das übers Knie zu brechen. Und mit einer fertigen Lösung ist dir am allerwenigsten genützt. Im Zweifel musst du die Aufgabe erstmal zurückstellen und weiter das Buch durcharbeiten. Wenn du auf Probleme stößt, schau mal in den zweiten Teil von [FAQ] Wie finde ich den Einstieg in C#?

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1

Thema geschlossen