2016-10-09 1 views
2

Ich schreibe ein Textabenteuer in C# für eine Schulaufgabe und ich bin schon auf ein Problem gestoßen.Reagieren auf Tastendruck während der Textausgabe in der Konsolenanwendung

habe ich eine Funktion Sätze tippen wie folgt aus:

public static void Zin (string zin) 
    { 

     foreach (char c in zin) 
     { 
      Console.Write(c); 
      Thread.Sleep(50); 
     } 

Jetzt das funktioniert, aber ich möchte implementieren, dass, wenn der Spieler die Enter-Taste trifft, wird der Satz sofort auf der Konsole eingegeben werden.

Ich bin mir nicht sicher, wie das geht. Ich habe versucht, eine while-Schleife in der foreach-Schleife, die prüft, ob Eingabe wird getroffen und dann den Satz ausdrucken, aber das funktioniert nicht.

Vielen Dank im Voraus!

Antwort

1

Mit der Eigenschaft Console.KeyAvailable können Sie herausfinden, ob Tasten gedrückt wurden, die nicht mit einer der Methoden Console.Read* gelesen wurden.

Wenn die Tasten gedrückt wurden, überspringen Sie das Warten innerhalb der Schleife. Lesen Sie nach der Schleife alle Tasten, die während der Schleife gedrückt wurden, so dass sie nicht zurückgegeben werden, wenn Sie später Console.Read* verwenden.

public static void Zin(string zin) 
{ 
    foreach (char c in zin) 
    { 
      Console.Write(c); 

      // Only wait when no key has been pressed 
      if (!Console.KeyAvailable) 
      { 
       Thread.Sleep(50); 
      } 
    } 

    // When keys have been pressed during our string output, read all of them, so they are not used for the following input 
    while (Console.KeyAvailable) 
    { 
      Console.ReadKey(true); 
    } 
} 

Siehe auch Listen for key press in .NET console app

+0

Vielen Dank für Ihre Antwort vor allem! Es scheint jedoch noch nicht zu funktionieren. Was genau macht die Console.KeyAvailable-Funktion? –

+0

Was funktioniert nicht? Ich habe das im Code getestet. Die Antwort enthält einen Link zur Dokumentation von Console.KeyAvailable. Klicken Sie einfach auf den Text, um zur Dokumentation zu gelangen. – NineBerry

+0

hmm, in meinem Code passiert nichts, wenn ich die 'Enter'-Taste drücke. Die Konsole schreibt den Satz nur noch Buchstabe für Buchstabe –

Verwandte Themen