Console.ReadKey
This method helps create interactive console programs. It does not require the user to press enter before returning. It can read modifiers such as control.
ConsoleKeyInfo
When ReadKey
is called, a ConsoleKeyInfo
struct
is returned. We test this struct
to enable more powerful text programs.
Here we use Console.ReadKey
with no arguments. The return value of the Console.ReadKey
method is an instance of the ConsoleKeyInfo
struct
.
ReadKey
returns once a key is pressed. We call instance properties on the ConsoleKeyInfo
to determine the input.ConsoleKeyInfo
is a struct
. ReadKey()
returns a new ConsoleKeyInfo
instance on each call.ConsoleKeyInfo
, you are reading the values that were already set in the struct
.ConsoleModifiers
, which is an enumerated constant.using System; class Program { static void Main() { Console.WriteLine("... Press escape, a, then control X"); // Call ReadKey method and store result in local variable. // ... Then test the result for escape. ConsoleKeyInfo info = Console.ReadKey(); if (info.Key == ConsoleKey.Escape) { Console.WriteLine("You pressed escape!"); } // Call ReadKey again and test for the letter a. info = Console.ReadKey(); if (info.KeyChar == 'a') { Console.WriteLine("You pressed a"); } // Call ReadKey again and test for control-X. // ... This implements a shortcut sequence. info = Console.ReadKey(); if (info.Key == ConsoleKey.X && info.Modifiers == ConsoleModifiers.Control) { Console.WriteLine("You pressed control X"); } Console.Read(); } }(Keys were pressed) ... Press escape, a, then control X ?You pressed escape! aYou pressed a ?You pressed control X
We next emphasize one of the uses for the ReadKey
method. With this method, you can create fully interactive console programs in the C# language.
using System; class Program { static char[,] _board = new char[5, 5]; static void Main() { int positionX = 0; int positionY = 0; while (true) { // At current position, write special char and update board. _board[positionX, positionY] = '@'; for (int i = 0; i < 5; i++) { for (int z = 0; z < 5; z++) { Console.Write(_board[z, i] == char.MinValue ? "." : _board[z, i]); } Console.WriteLine(); // End line. } // Handle directional keys with ReadKey. Console.Write(">"); var info = Console.ReadKey(); Console.WriteLine(); switch (info.KeyChar) { case 'w': positionY--; break; case 'a': positionX--; break; case 's': positionY++; break; case 'd': positionX++; break; } } } }@.... ..... ..... ..... ..... >d @@... ..... ..... ..... ..... >d @@@.. ..... ..... ..... ..... >s @@@.. ..@.. ..... ..... ..... >s @@@.. ..@.. ..@.. ..... ..... >s @@@.. ..@.. ..@.. ..@.. ..... >d @@@.. ..@.. ..@.. ..@@. ..... >d @@@.. ..@.. ..@.. ..@@@ ..... >w @@@.. ..@.. ..@.@ ..@@@ ..... >
Console.ReadKey
can read keys from the console window and immediately return the value. You can use the ConsoleKeyInfo
struct
to then access the values read in your C# code.