Char KeyChar ConsoleKey Key ConsoleModifiers Modifiers

Свойство KeyChar содержит эквивалент char введенного с клавиатуры символа, свойство Key — значение из перечисления ConsoleKey всех клавиш на клавиатуре, а свойство Modifiers — описание одной из модифицирующих клавиш (<Alt>, <Ctrl> или <Shift>), которые были нажаты, если это действительно имело место, при формировании ввода с клавиатуры. Эти модифицирующие клавиши представлены в перечислении ConsoleModifiers следующими значениями: Control, Shift и Alt. В свойстве Modifiers может присутствовать несколько значений нажатых модифицирующих клавиш.

Главное преимущество метода ReadKey () заключается в том, что он предоставляет средства для организации ввода с клавиатуры в диалоговом режиме, поскольку этот ввод не буферизуется построчно. Для того чтобы продемонстрировать данный метод в действии, ниже приведен соответствующий пример программы.

// Считать символы, введенные с консоли, используя метод ReadKey().

Using System;

class ReadKeys {

static void Main() {

ConsoleKeylnfo keypress;

Console.WriteLine("Введите несколько символов, " +

"а по окончании - <Q>.");

do {

keypress = Console.ReadKey(); // считать данные о нажатых клавишах Console.WriteLine(" Вы нажали клавишу: " + keypress.KeyChar);

// Проверить нажатие модифицирующих клавиш.

if((ConsoleModifiers.Alt & keypress.Modifiers) != 0)

Console.WriteLine("Нажата клавиша <Alt>."); if((ConsoleModifiers.Control & keypress.Modifiers) != 0)

Console.WriteLine("Нажата клавиша <Control>."); if((ConsoleModifiers.Shift & keypress.Modifiers) != 0)

Console.WriteLine("Нажата клавиша <Shift>.");

} while(keypress.KeyChar != ' Q');

}

}

Вот, например, к какому результату может привести выполнение этой программы.

Введите несколько символов, а по окончании - <Q>.

а Вы нажали клавишу: а

b Вы нажали клавишу: b

d Вы нажали клавишу: d

А Вы нажали клавишу: А

Нажата клавиша <Shift>.

В Вы нажали клавишу: В

Нажата клавиша <Shift>.

С Вы нажали клавишу: С

Нажата клавиша <Shift>.

• Вы нажали клавишу: •

Нажата клавиша <Control>.

Q Вы нажали клавишу: Q

Нажата клавиша <Shift>.

/

Как следует из приведенного выше результата, всякий раз, когда нажимается клавиша, метод ReadKey () немедленно возвращает введенный с клавиатуры символ.*Этим он отличается от упоминавшегося ранее метода Read () , в котором ввод выполняется с построчной буферизацией. Поэтому если требуется добиться в программе реакции на ввод с клавиатуры, то рекомендуется выбрать метод ReadKey ().

Запись данных в поток вывода на консоль

Потоки Console . Out и Console .Error являются объектами типа TextWriter. Вывод на консоль проще всего осуществить с помощью методов Write () и WriteLine () , с которыми вы уже знакомы. Существуют варианты этих методов для вывода данных каждого из встроенных типов. В классе Console определяются его собственные варианты метода Write() nWriteLine(),n поэтому они могут вызываться непосредственно для класса Console, как это было уже не раз показано на страницах данной книги. Но при желании эти и другие методы могут быть вызваны и для класса TextWriter, который является базовым для потоков Console . Out и Console . Error.

Ниже приведен пример программы, в котором демонстрируется вывод в потоки Console . Out и Console . Error. По умолчанию данные в обоих случаях выводятся на консоль.

// Организовать вывод в потоки Console.Out и Console.Error.

Using System;

class ErrOut {

static void Main() { int a=10, b=0; int result;

Console.Out.WriteLine("Деление на нуль приведет " +

"к исключительной ситуации.");

try {

result = а / b; // сгенерировать исключение при попытке деления на нуль } catch(DivideByZeroException exc) {

Console.Error.WriteLine(exc.Message);

}

}

}

При выполнении этой программы получается следующий результат.

Наши рекомендации