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 — описание одной из модифицирующих клавиш (<Alt>, <Ctrl> или <Shift>), которые были нажаты, если это действительно имело место, при формировании ввода с клавиатуры. Эти модифицирующие клавиши представлены в перечислении ConsoleModifiers следующими значениями: Control, Shift и Alt. В свойстве Modifiers может присутствовать несколько значений нажатых модифицирующих клавиш.

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

 

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

using System;

class ReadKeys {

static void Main() {

ConsoleKeyInfo 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() и WriteLine(), и поэтому они могут вызываться непосредственно для класса 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 = a / b; // сгенерировать исключение при попытке деления на нуль

} catch(DivideByZeroException exc) {

Console.Error.WriteLine(exc.Message);

}

}

}

 

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

 


Дата добавления: 2019-02-12; просмотров: 264; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!