2017-04-30 6 views
-1

Ich mache ein Textbearbeitungsprogramm (frag nicht, warum ich gerade programmiere, bin aber ziemlich neu dazu). Ich möchte eine Benutzereingabe erhalten (ich habe console.readline() versucht, wenn es bessere Befehle gibt, lass es mich wissen!), Stoppe aber sobald eine bestimmte Anforderung erfüllt ist (zum Beispiel in meinem aktuellen Fall, wenn die Eingabe ein Zeichen lang erreicht)).Wie man eine readline stoppt, wenn bestimmte Anforderungen erfüllt werden

So

input = ReadLine() 

und einen Weg, es zu stoppen, etwas, als ob ich eine if-Anweisung in sie injiziert:

If input.length = 1 
     EndReadLine (or something like that) 

Ich habe versucht, einen Weg zum Erfassen der Suche, wenn eine Taste gedrückt wird aber ich konnte nur die Erkennung für die Shift-Taste und solche Dinge finden, nicht Buchstaben & Nummern. Wenn es eine Möglichkeit gibt, Zeichen zu erkennen, wäre es sehr hilfreich :)

+0

Analysieren/untersuchen, was der Benutzer eingibt und entsprechend handeln – Plutonix

+0

Wie kann ich das tun? –

+0

Das kann man nicht, zumindest nicht mit 'ReadLine()', da das ** blockt ** bis Enter gedrückt wird. Was Sie benötigen, ist [KeyAvailable()] (https://msdn.microsoft.com/en-us/library/system.console.keyavailable (v = vs.110) .aspx) und [ReadKey()] (https: //msdn.microsoft.com/en-us/library/x3h8xffw(v=vs.110).aspx) in einer engen Schleife ... aber das bedeutet, dass Sie die Anzeige dessen, was getippt wurde, verwalten und den Cursor manuell bewegen müssen . Dies ist wahrscheinlich schwieriger zu erreichen als Sie denken! –

Antwort

0

Wenn dies eine Konsolenanwendung ist, dann ist es nicht schwer, eine Alternative für ReadLine zu schreiben.

Console.WriteLine("Start to type. Press ctrl-enter to quit.") 

' Keep track of the pressed keys. 
Dim input = New StringBuilder() 

' An alternative could be a counter. Accept only n numbers of characters. 
Dim isTyping As Boolean = True 
While isTyping 
    ' Wait until a key was pressed. 
    Dim k = Console.ReadKey() 
    ' If ctrl-enter was pressed exit the loop (no need to add this to input). 
    ' Otherwise append the key to the input variable. 
    If k.Key = ConsoleKey.Enter AndAlso k.Modifiers = ConsoleModifiers.Control Then 
     isTyping = False 
    Else 
     input.Append(k.KeyChar) 
    End If 
End While 

' You can read what was typed, the pressed keys were send to the console. 
Console.WriteLine() 
Console.WriteLine("And the result is: {0}", input.ToString) 

Console.WriteLine() 
Console.WriteLine("Press a key to stop the program.") 
' Notice the parameter. The pressed key will not be send to the console. 
Console.ReadKey(True) 

Dies beantwortet auch die Frage, wie bestimmte Schlüssel erkannt werden.

In Ihrem Fall ist es sogar viel einfacher, da Sie einen Schlüssel benötigen. Sie brauchen also die Schleife nicht:

Dim k = Console.ReadKey() 
Console.WriteLine("Key pressed: {0}", k.KeyChar) 
Verwandte Themen