2012-07-25 12 views
7

コンソールアプリケーションでキーが押されているかどうかを確認する必要があります。キーは、キーボードの任意のキーにすることができます。私はこれを考え出すていたコンソールアプリケーションでキーが押されているかどうかをチェックするC#

if(keypressed) 
{ 

//Cleanup the resources used 

} 

:ような何か

ConsoleKeyInfo cki; 
cki=Console.ReadKey(); 

if(cki.Equals(cki)) 
Console.WriteLine("key pressed"); 

それは、修飾キーを除くすべてのキーでうまく動作します - どのように私はこれらのキーを確認することができますか?

+0

何を試しましたか? – BugFinder

+0

ConsoleKeyInfo cki; cki = Console.ReadKey(); if(cki.Equals(cki))Console.WriteLine( "key pressed"); 修飾キー以外のすべてのキーで正常に機能します。 – user1502952

+0

私はそれに答えて以来、多くの質問を変更しました.. – BugFinder

答えて

12

これはあなたを助けることができます。

Console.WriteLine("Press any key to stop"); 
do { 
    while (! Console.KeyAvailable) { 
     // Do something 
    }  
} while (Console.ReadKey(true).Key != ConsoleKey.Escape); 

あなたはifでそれを使用したい場合は、この試すことができます任意のキーについて

ConsoleKeyInfo cki; 
while (true) 
{ 
    cki = Console.ReadKey(); 
    if (cki.Key == ConsoleKey.Escape) 
    break; 
} 

を非常に簡単です:ifを削除します。 @DawidFerenczyとして


我々はConsole.ReadKey()がブロックしていることに注意する必要が言及しました。実行を停止し、キーが押されるのを待ちます。文脈によっては、これは便利ではないかもしれません。

実行をブロックしない場合は、Console.KeyAvailableをテストするだけです。キーが押された場合はtrue、そうでない場合はfalseが含まれます。

+1

私の答えを忘れずにマークしてください。 –

+0

任意のキーを押しても機能するようにしたい – user1502952

+0

「if」を削除するだけです。 –

5

ノンブロッキングしたい場合はConsole.KeyAvailibleをご覧ください。

do { 
    Console.WriteLine("\nPress a key to display; press the 'x' key to quit."); 

// Your code could perform some useful task in the following loop. However, 
// for the sake of this example we'll merely pause for a quarter second. 

    while (Console.KeyAvailable == false) 
     Thread.Sleep(250); // Loop until input is entered. 
    cki = Console.ReadKey(true); 
    Console.WriteLine("You pressed the '{0}' key.", cki.Key); 
    } while(cki.Key != ConsoleKey.X); 
} 

ブロックする場合はConsole.ReadKeyを使用してください。

+0

if(cki.key == ConsoleKey.Enter)のように使用することは可能ですか? ConsoleKey.Enterを指定するのではなく、一度にすべてのキーをチェックするbcozループを避ける必要があります。 – user1502952

関連する問題