Обратите внимание на то, что метод ReadLine()
теперь вызывается непосредственно для потока Console.In
. Поэтому если требуется доступ к методам, определенным в классе TextReader
, который является базовым для потока Console.In
, то подобные методы вызываются так, как было показано в приведенном выше примере.
В состав среды .NET Framework включен метод, определяемый в классе Console
и позволяющий непосредственно считывать отдельно введенные с клавиатуры символы без построчной буферизации. Этот метод называется ReadKey()
. При нажатии клавиши метод ReadKey()
немедленно возвращает введенный с клавиатуры символ. И в этом случае пользователю уже не нужно нажимать дополнительно клавишу ReadKey()
позволяет считывать и обрабатывать ввод с клавиатуры в реальном масштабе времени.
Ниже приведены две формы объявления метода ReadKey()
.
static ConsoleKeylnfo ReadKey()
static ConsoleKeylnfo ReadKey(bool intercept)
В первой форме данного метода ожидается нажатие клавиши. Когда оно происходит, метод возвращает введенный с клавиатуры символ и выводит его на экран. Во второй форме также ожидается нажатие клавиши, и затем возвращается введенный с клавиатуры символ. Но если значение параметра intercept
равно true
, то введенный символ не отображается. А если значение параметра intercept равно false
, то введенный символ отображается.
Метод ReadKey()
возвращает информацию о нажатии клавиши в объекте типа ConsoleKeylnfo
, который представляет собой структуру, состоящую из приведенных ниже свойств, доступных только для чтения.
char KeyChar
ConsoleKey Key
ConsoleModifiers Modifiers
Свойство KeyChar
содержит эквивалент char
введенного с клавиатуры символа, свойство Key
— значение из перечисления ConsoleKey
всех клавиш на клавиатуре, а свойство Modifiers
— описание одной из модифицирующих клавиш (ConsoleModifiers
следующими значениями: Control, Shift
и Alt
. В свойстве Modifiers
может присутствовать несколько значений нажатых модифицирующих клавиш.
Главное преимущество метода ReadKey()
заключается в том, что он предоставляет средства для организации ввода с клавиатуры в диалоговом режиме, поскольку этот ввод не буферизуется построчно. Для того чтобы продемонстрировать данный метод в действии, ниже приведен соответствующий пример программы.
// Считать символы, введенные с консоли, используя метод ReadKey().
using System;
class ReadKeys {
static void Main() {
ConsoleKeyInfo keypress;
Console.WriteLine("Введите несколько символов, " +
"а по окончании -
.");
do {
keypress = Console.ReadKey(); // считать данные о нажатых клавишах
Console.WriteLine(" Вы нажали клавишу: " + keypress.KeyChar);
// Проверить нажатие модифицирующих клавиш.
if((ConsoleModifiers.Alt & keypress.Modifiers) != 0)
Console.WriteLine("Нажата клавиша
if((ConsoleModifiers.Control & keypress.Modifiers) != 0)
Console.WriteLine("Нажата клавиша
if((ConsoleModifiers.Shift & keypress.Modifiers) != 0)
Console.WriteLine("Нажата клавиша
} while(keypress.KeyChar != 'Q');
}
}
Вот, например, к какому результату может привести выполнение этой программы.
Введите несколько символов, а по окончании -
.
а Вы нажали клавишу: а
b Вы нажали клавишу: b
d Вы нажали клавишу: d
А Вы нажали клавишу: А
Нажата клавиша
В Вы нажали клавишу: В
Нажата клавиша
С Вы нажали клавишу: С