2017-04-30 5 views
-1

私はテキスト編集プログラムを作成しています(プログラミングを好きな理由を聞かないでください)。私はユーザーの入力を取得したい(より良いコマンドがあれば私はconsole.readline()を試してみた!)しかし、特定の要件が満たされたら停止する(例えば、現在のケースでは、 )。私はそれにif文を注入かのよう特定の要件が満たされたときにreadlineを停止する方法

ので、

input = ReadLine() 

と、それを停止する方法は、いくぶん:

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

を私はキーが押されたかどうかを検出する方法を見つけてみましたシフトキーとそのようなものの検出は、&という数字ではなく、見つけられました。文字を検出する方法があれば、非常に役に立ちます:)

+0

ユーザーが入力した内容を解析して、それに応じて処理します。 – Plutonix

+0

どうすればいいですか? –

+0

Enterキーが押されるまで、少なくとも** ReadLine()はブロックされません。必要なのは[KeyAvailable()](https://msdn.microsoft.com/en-us/library/system.console.keyavailable(v = vs.110).aspx)と[ReadKey()](https: //msdn.microsoft.com/en-us/library/x3h8xffw(v=vs.110).aspx)タイトなループで...しかし、これはあなたが入力されたものの表示を管理し、手動でカーソルを移動する必要があることを意味します。これは思うよりも達成が難しいでしょう! –

答えて

0

これはコンソールアプリケーションの場合、ReadLineの代替手段を書くのは難しくありません。

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) 

これは、特定のキーを検出する方法に関する質問にも答えます。

あなたのケースでは、1つのキーが必要なのでさらに簡単です。したがってループは必要ありません。

Dim k = Console.ReadKey() 
Console.WriteLine("Key pressed: {0}", k.KeyChar) 
関連する問題