Console bei Esc schließen

Noctuh schrieb:
wenn man etwas anderes eingibt dann kommt man zurück zum Hauptmenü

Wenn du nun am Ende jedes Menüs statt mit ReadLine() und CovertToChar einfach auf ReadKey() reagierst und explizit die Taste auswertest und nicht den konvertierten Char, kannst du auch auf ESC, j, n, etc prüfen und dann das Programm beenden.
 
Ja aber ich brauch es ja nicht nur am Ende jedes Menüpunktes sondern überall im Menü. Zum Beispiel ich mach eine Eingabe will dann abrechen drück Esc und komme wieder zum Hauptmenü
 
Das geht aber so nicht, weil du nicht gleichzeitig mit ReadLine() auf einen eingebenen Text mit anschließendem Enter und ReadKey() warten kannst. ReadLine() interpretiert ESC bereits selbst, indem es die Eingabe löscht und auf neuen Input wartet. Man könnte höchstens ReadLine() aufdröseln und Tastenweise einlesen und den String zusammenbauen bzw. auf ein etwaiges ESC reagieren. Ich bezweifle aber irgendwie, dass das Ziel der Aufgabe ist und gehe eher davon aus, dass du die Aufgabenstellung an dieser Stelle falsch interpretierst.
 
  • Gefällt mir
Reaktionen: Nilson
Mit ESC soll aus jedem Punkt heraus abgebrochen werden und zum Hauptmenü zurückgekehrt werden.

Das ist die Aufgabenstellung 1 zu 1 kopiert und wenn es da so steht muss ja irgendwie gehen oder?
 
Dann sehe ich tatsächlich nur den Weg, über eine Schleife mit ReadKey() die Tasten bei der Eingabe einzeln abzufragen und dann auf ESC bzw. eben auf Buchstaben/Zahlen zu triggern. Das wäre eine selbstgebaute Version von ReadLine(), die bei ESC die komplette Eingabe abbricht und nicht nur den eingegebenen String zurücksetzt wie es bei ReadLine() selbst der Fall ist.

Allerdings hast du vielleicht schon gemerkt, dass man sich mit Console-Apps etwas schwer tut, weil man in 999 von 1000 Fällen mit C# gleich ne GUI dazu baut, mit Events und allem drum und dran. Es mag also einen anderen Weg geben, aber mir fällt keiner ein.


Da der Lerneffekt gering ist, wenn man Code vorgekaut serviert bekommt und Hilfe bei "Aufgaben" immer ein wenig nach Hausaufgaben stinkt (auch wenn man das verneint), anbei nur andeutungsweise wie sowas aussehen könnte:


Code:
static string myReadLine()
        {
            string input = "";
            ConsoleKeyInfo key;

            do
            {
                // key einlesen
                // Wenn key = Escape, input leeren
                // sonst input um KeyChar ergänzen
            } while (key nix Escape und nix Enter);

            return input;
        }

Wenn du das nun anstelle von ReadLine() aufrufst, sollte im Falle einer gültigen Eingabe der eingegebene String zurückkommen und wenn währenddessen Escape gedrückt wurde null. Auf letzteres triggerst du das PKW-Menü, das die Schleife abbricht sobald bei einer Eingabe null gefunden wurde, was eben auf das Escape hindeutet.

Vielleicht denke ich aber auch zu kompliziert. Das ist eben das Ding, wenn man das eigentlich über ein Event lösen würde, es aber mangels Unterstützung nicht kann :-/
 
Wie würde es den mit einem Event funktionieren könntest du mir das mal zeigen oder eher schlecht?
Und keine Angst ist keine Hausaufgabe das sind Übungen die ich von nem Kollegen von meinem Vater bekomme der Programmierer ist. Das Problem ist ich erreiche ihn im Moment nicht und komme so nicht weiter
 
Hast du den "Kollegen von deinem Vater" mal erreicht und gefragt, wie er die Aufgabe meint?
 
Mit ESC soll aus jedem Punkt heraus abgebrochen werden und zum Hauptmenü zurückgekehrt werden.

Ja genau so wie es hier steht. Hast du ne Idee wie man es mit einem Event schaffen könnte oder eher nicht?
 
Im übrigen kann man den Aufgabenteil, den du in #24 zitiert hast, so oder so interpretieren. Du interpretierst die Aufgabenstellung so, dass man während der Eingabe eines PKW abbrechen können soll. Ich würde eher sagen, dass man einfach aus dem Untermenü per Escape wieder ins Hauptmenü kommen soll. Während deine Interpretation eine gerade für Programmieranfänger komplexe Herausforderung darstellt - im Kontext einer rudimentären Konsolen-Anwendung -, ist meine Interpretation geradezu banal, weil man am Ende der PKW-Schleife einfach auf ESC prüfen muss.

Übrigens: Es ist nicht sinnvoll und vor allem nicht zielführend, wenn man dir jetzt ein Beispiel mit Events zeigt, weil du es in einer Console-App nicht anwenden kannst. Außerdem gibt's bei Onkel google genug Beispiele, such einfach mal nach "c# event keypress example" o.ä. Das werden dann aber Beispiele für WinForms- oder WPF-Anwendungen sein.
 
  • Gefällt mir
Reaktionen: Nilson
Da es ja scheinbar nur um persönliches Interesse geht und keine Prüfung dahintersteckt, spricht im übrigen nichts dagegen, die Aufgabenstellung frei auszulegen. Aufgaben dieser Art sind bestenfalls eine Fingerübung, um ein paar selten verwendete Sonderzeichen auf der Tastatur kennenzulernen (zB {} ) und um sich mit Konzepten wie Funktionen, Schleifen und rudimentäre Benutzerinteraktion vertraut zu machen. Selbst wenn es eine Schulaufgabe wäre, reißt dir niemand den Kopf ab, wenn deine Lösung nicht 100% abdeckt.

Löse die Aufgabe also jetzt so wie du es hinkriegst. Der Lerneffekt ist bedeutend größer, wenn du selbst eine Lösung programmierst, auch wenn sie vielleicht nicht 100%ig der Musterlösung entspricht. Lieber so als am Ende die Musterlösung zu haben, die dann aber von anderen in einem Forum (vor)programmiert wurde ;)

Mit den Express/Community Editions von Visual Studio bekommt man auch als Hobbyprogrammierer oder solche, die es mal werden wollen, eine umfangreiche und vor allem kostenlose Entwicklungsumgebung an die Hand. Nachdem du diese Konsolen-Anwendung fertig hast, wirst du schneller mit einer kleinen GUI bestehend aus 1-2 Fenstern, einer Handvoll Textfeldern und ein paar Buttons rumhantieren als du glaubst. Dann lernst du mehr über Klassen, Objekte und eben auch Events. Da geht es dann erst richtig los.
 
Zurück
Oben