キーを押すのを待つ小さなアプリケーションを作成しています。次に、どのキーが押されたかに基づいてアクションを実行します。例えば、キーが押されていなければ、キー1が押された場合にアクション1を実行し、キー2が押された場合にはアクション2を実行します。これまでに便利な投稿をいくつか見つけました。this one例。これから、私はこれまでに以下のコードを持っています。コンソールアプリケーションでキーを読む
do
{
while (!Console.KeyAvailable)
{
if (Console.ReadKey(true).Key == ConsoleKey.NumPad1)
{
Console.WriteLine(ConsoleKey.NumPad1.ToString());
}
if (Console.ReadKey(true).Key == ConsoleKey.NumPad2)
{
Console.WriteLine(ConsoleKey.NumPad1.ToString());
}
}
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);
あなたがすでに推測しているかもしれない問題がいくつかあります。
1) キーが押されなければならないという意味、一時停止で結果を押されたキーを検出するReadKey
を使用しました。私は本当にこれを避ける方法を見つける必要があります。可能であればKeyAvailable
を使用していますが、これを使ってどのキーが押されたかを検出する方法がわかりません。
2)何らかの理由で 、Escape
キーは、アプリケーションの外に脱出しません。上記のようにコードを実行しても、指定されたキーを使用してアプリケーションを終了させることはできません。アイデアはありますか?if
ステートメントを削除するとどうなりますか?
これは私が望むまさにんし、それは私が 'KeyAvailable'が何をしているかを理解するのに役立ちます - 使用可能なキーがないうちにループします(待ちます)。使用可能なキーがあるとすぐに、ループを解除し、キーをチェックします。どうもありがとう! – Klicker
そのタイトな内側に座っている間にループが良い考えのように見えません。なぜ、すべてのコードを単一の 'if'ステートメントの中に置き、inner whileループを削除しないのですか? 'do {if(Console.KeyAvailable){key = Console.ReadKey(true).Key; ...}} while(key!= ConsoleKey.Escape); '。 'ReadKey'呼び出しで' Key'プロパティを直接参照することで、キーの押下に関する他の情報(Ctrlキー、Altキー、Shiftキー)も押されます。 –
あなたは良い点を@ChrisDunawayにしますが、あなたの例では、変数 'key'はキーが押された後に値が割り当てられます。したがって、定義されていない条件を使用してdo-whileループを構築することはできません。私はループ(?)を開始するために常に一時的な値を割り当てることができると思いますが、それは面倒です - もっと乱雑です(しかし、ループのように乱雑ではないかもしれません...)。ありがとう – Klicker