Console.ReadKey Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает следующий нажатый пользователем символ или функциональную клавишу.
Перегрузки
ReadKey() |
Получает следующий нажатый пользователем символ или функциональную клавишу. Нажатая клавиша отображается в окне консоли. |
ReadKey(Boolean) |
Получает следующий нажатый пользователем символ или функциональную клавишу. Нажатая клавиша может быть отображена в окне консоли. |
ReadKey()
- Исходный код:
- Console.cs
- Исходный код:
- Console.cs
- Исходный код:
- Console.cs
Получает следующий нажатый пользователем символ или функциональную клавишу. Нажатая клавиша отображается в окне консоли.
public:
static ConsoleKeyInfo ReadKey();
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static ConsoleKeyInfo ReadKey ();
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
[System.Runtime.Versioning.UnsupportedOSPlatform("android")]
[System.Runtime.Versioning.UnsupportedOSPlatform("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatform("tvos")]
public static ConsoleKeyInfo ReadKey ();
public static ConsoleKeyInfo ReadKey ();
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member ReadKey : unit -> ConsoleKeyInfo
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("android")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("ios")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("tvos")>]
static member ReadKey : unit -> ConsoleKeyInfo
static member ReadKey : unit -> ConsoleKeyInfo
Public Shared Function ReadKey () As ConsoleKeyInfo
Возвращаемое значение
Объект, описывающий константу ConsoleKey и символ Юникода (при наличии), соответствующий нажатой клавише консоли. Этот объект ConsoleKeyInfo также описывает в битовой комбинации значений ConsoleModifiers, нажимались ли клавиши-модификаторы (одна или несколько) Shift, Alt или Ctrl одновременно с клавишей консоли.
- Атрибуты
Исключения
Свойство In перенаправлено из потока, отличного от консоли.
Примеры
Одним из наиболее распространенных способов ReadKey() использования метода является остановка выполнения программы до тех пор, пока пользователь не нажмет клавишу и приложение не завершит работу или не отобразит дополнительное окно с информацией. В следующем примере метод используется ReadKey() для ожидания нажатия пользователем клавиши ВВОД перед завершением приложения.
using System;
public class Example
{
public static void Main()
{
DateTime dat = DateTime.Now;
Console.WriteLine("The time: {0:d} at {0:t}", dat);
TimeZoneInfo tz = TimeZoneInfo.Local;
Console.WriteLine("The time zone: {0}\n",
tz.IsDaylightSavingTime(dat) ?
tz.DaylightName : tz.StandardName);
Console.Write("Press <Enter> to exit... ");
while (Console.ReadKey().Key != ConsoleKey.Enter) {}
}
}
// The example displays output like the following:
// The time: 11/11/2015 at 4:02 PM:
// The time zone: Pacific Standard Time
open System
let dat = DateTime.Now
printfn $"The time: {dat:d} at {dat:t}"
let tz = TimeZoneInfo.Local
printfn $"The time zone: {if tz.IsDaylightSavingTime dat then tz.DaylightName else tz.StandardName}\n"
printf"Press <Enter> to exit... "
while Console.ReadKey().Key <> ConsoleKey.Enter do ()
// The example displays output like the following:
// The time: 12/28/2021 at 8:35 PM
// The time zone: Pacific Standard Time
Module Example
Public Sub Main()
Dim dat As Date = Date.Now
Console.WriteLine("The time: {0:d} at {0:t}", dat)
Dim tz As TimeZoneInfo = TimeZoneInfo.Local
Console.WriteLine("The time zone: {0}",
If(tz.IsDaylightSavingTime(dat),
tz.DaylightName, tz.StandardName))
Console.WriteLine()
Console.Write("Press <Enter> to exit... ")
Do While Console.ReadKey().Key <> ConsoleKey.Enter
Loop
End Sub
End Module
' The example displays the following output:
' The time: 11/11/2015 at 4:02 PM
' The time zone: Pacific Standard Time
Обратите внимание, что эта перегрузка ReadKey метода по умолчанию повторяет все отображаемые клавиши, нажимаемые пользователем в консоли. Чтобы подавить их, вызовите ReadKey метод с аргументом true
intercept
.
В следующем примере метод используется для ReadKey() отображения сведений о нажатой пользователем клавише.
using namespace System;
void main()
{
ConsoleKeyInfo cki;
// Prevent example from ending if CTL+C is pressed.
Console::TreatControlCAsInput = true;
Console::WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
Console::WriteLine("Press the Escape (Esc) key to quit: \n");
do
{
cki = Console::ReadKey();
Console::Write(" --- You pressed ");
if((cki.Modifiers & ConsoleModifiers::Alt) != ConsoleModifiers()) Console::Write("ALT+");
if((cki.Modifiers & ConsoleModifiers::Shift) != ConsoleModifiers()) Console::Write("SHIFT+");
if((cki.Modifiers & ConsoleModifiers::Control) != ConsoleModifiers()) Console::Write("CTL+");
Console::WriteLine(cki.Key.ToString());
} while (cki.Key != ConsoleKey::Escape);
}
// This example displays output similar to the following:
// Press any combination of CTL, ALT, and SHIFT, and a console key.
// Press the Escape (Esc) key to quit:
//
// a --- You pressed A
// k --- You pressed ALT+K
// ► --- You pressed CTL+P
// --- You pressed RightArrow
// R --- You pressed SHIFT+R
// --- You pressed CTL+I
// j --- You pressed ALT+J
// O --- You pressed SHIFT+O
// § --- You pressed CTL+U }
using System;
class Example
{
public static void Main()
{
ConsoleKeyInfo cki;
// Prevent example from ending if CTL+C is pressed.
Console.TreatControlCAsInput = true;
Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
Console.WriteLine("Press the Escape (Esc) key to quit: \n");
do
{
cki = Console.ReadKey();
Console.Write(" --- You pressed ");
if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
Console.WriteLine(cki.Key.ToString());
} while (cki.Key != ConsoleKey.Escape);
}
}
// This example displays output similar to the following:
// Press any combination of CTL, ALT, and SHIFT, and a console key.
// Press the Escape (Esc) key to quit:
//
// a --- You pressed A
// k --- You pressed ALT+K
// ► --- You pressed CTL+P
// --- You pressed RightArrow
// R --- You pressed SHIFT+R
// --- You pressed CTL+I
// j --- You pressed ALT+J
// O --- You pressed SHIFT+O
// § --- You pressed CTL+U
open System
// Prevent example from ending if CTL+C is pressed.
Console.TreatControlCAsInput <- true
printfn "Press any combination of CTL, ALT, and SHIFT, and a console key."
printfn "Press the Escape (Esc) key to quit: \n"
let mutable cki = Unchecked.defaultof<ConsoleKeyInfo>
while cki.Key <> ConsoleKey.Escape do
cki <- Console.ReadKey()
printf " --- You pressed "
if int (cki.Modifiers &&& ConsoleModifiers.Alt) <> 0 then printf "ALT+"
if int (cki.Modifiers &&& ConsoleModifiers.Shift) <> 0 then printf "SHIFT+"
if int (cki.Modifiers &&& ConsoleModifiers.Control) <> 0 then printf "CTL+"
printfn $"{cki.Key}"
// This example displays output similar to the following:
// Press any combination of CTL, ALT, and SHIFT, and a console key.
// Press the Escape (Esc) key to quit:
//
// a --- You pressed A
// k --- You pressed ALT+K
// ► --- You pressed CTL+P
// --- You pressed RightArrow
// R --- You pressed SHIFT+R
// --- You pressed CTL+I
// j --- You pressed ALT+J
// O --- You pressed SHIFT+O
// § --- You pressed CTL+U
Class Example
Public Shared Sub Main()
Dim cki As ConsoleKeyInfo
' Prevent example from ending if CTL+C is pressed.
Console.TreatControlCAsInput = True
Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
Do
cki = Console.ReadKey()
Console.Write(" --- You pressed ")
If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
Console.WriteLine(cki.Key.ToString)
Loop While cki.Key <> ConsoleKey.Escape
End Sub
End Class
' This example displays output similar to the following:
' Press any combination of CTL, ALT, and SHIFT, and a console key.
' Press the Escape (Esc) key to quit:
'
' a --- You pressed A
' k --- You pressed ALT+K
' ► --- You pressed CTL+P
' --- You pressed RightArrow
' R --- You pressed SHIFT+R
' --- You pressed CTL+I
' j --- You pressed ALT+J
' O --- You pressed SHIFT+O
' § --- You pressed CTL+U
Комментарии
Метод ReadKey ожидает, то есть блокирует поток, выдающий ReadKey метод, пока не будет нажат символьная или функциональная клавиша. Символьная или функциональная клавиша может быть нажата в сочетании с одной или несколькими клавишами-модификаторами ALT, CTRL или SHIFT. Однако нажатие клавиши-модификатора само по себе не приведет к возврату ReadKey метода.
В зависимости от приложения может потребоваться использовать метод в сочетании ReadKey со свойством KeyAvailable .
Метод ReadKey считывает с клавиатуры, даже если стандартные входные данные перенаправляются в файл с SetIn помощью метода .
См. также раздел
Применяется к
ReadKey(Boolean)
- Исходный код:
- Console.cs
- Исходный код:
- Console.cs
- Исходный код:
- Console.cs
Получает следующий нажатый пользователем символ или функциональную клавишу. Нажатая клавиша может быть отображена в окне консоли.
public:
static ConsoleKeyInfo ReadKey(bool intercept);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static ConsoleKeyInfo ReadKey (bool intercept);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
[System.Runtime.Versioning.UnsupportedOSPlatform("android")]
[System.Runtime.Versioning.UnsupportedOSPlatform("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatform("tvos")]
public static ConsoleKeyInfo ReadKey (bool intercept);
public static ConsoleKeyInfo ReadKey (bool intercept);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member ReadKey : bool -> ConsoleKeyInfo
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("android")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("ios")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("tvos")>]
static member ReadKey : bool -> ConsoleKeyInfo
static member ReadKey : bool -> ConsoleKeyInfo
Public Shared Function ReadKey (intercept As Boolean) As ConsoleKeyInfo
Параметры
- intercept
- Boolean
Определяет, следует ли отображать нажатую клавишу в окне консоли. Значение true
, чтобы не отображать нажатую клавишу; в противном случае — значение false
.
Возвращаемое значение
Объект, описывающий константу ConsoleKey и символ Юникода (при наличии), соответствующий нажатой клавише консоли. Этот объект ConsoleKeyInfo также описывает в битовой комбинации значений ConsoleModifiers, нажимались ли клавиши-модификаторы (одна или несколько) Shift, Alt или Ctrl одновременно с клавишей консоли.
- Атрибуты
Исключения
Свойство In перенаправлено из потока, отличного от консоли.
Примеры
Одним из наиболее распространенных способов ReadKey использования метода является остановка выполнения программы до тех пор, пока пользователь не нажмет клавишу и приложение не завершит работу или не отобразит дополнительное окно с информацией. В следующем примере метод используется ReadKey(Boolean) для ожидания нажатия пользователем клавиши ВВОД перед завершением приложения. Обратите внимание, что если пользователь нажимает любую другую клавишу, она не передается в консоль.
using System;
public class Example
{
public static void Main()
{
DateTime dat = DateTime.Now;
Console.WriteLine("The time: {0:d} at {0:t}", dat);
TimeZoneInfo tz = TimeZoneInfo.Local;
Console.WriteLine("The time zone: {0}\n",
tz.IsDaylightSavingTime(dat) ?
tz.DaylightName : tz.StandardName);
Console.Write("Press <Enter> to exit... ");
while (Console.ReadKey(true).Key != ConsoleKey.Enter) {}
}
}
// The example displays output like the following:
// The time: 11/11/2015 at 4:02 PM:
// The time zone: Pacific Standard Time
open System
let dat = DateTime.Now
printfn $"The time: {dat:d} at {dat:t}"
let tz = TimeZoneInfo.Local
printfn $"The time zone: {if tz.IsDaylightSavingTime dat then tz.DaylightName else tz.StandardName}\n"
printf"Press <Enter> to exit... "
while Console.ReadKey(true).Key <> ConsoleKey.Enter do ()
// The example displays output like the following:
// The time: 12/28/2021 at 8:37 PM
// The time zone: Pacific Standard Time
Module Example
Public Sub Main()
Dim dat As Date = Date.Now
Console.WriteLine("The time: {0:d} at {0:t}", dat)
Dim tz As TimeZoneInfo = TimeZoneInfo.Local
Console.WriteLine("The time zone: {0}",
If(tz.IsDaylightSavingTime(dat),
tz.DaylightName, tz.StandardName))
Console.WriteLine()
Console.Write("Press <Enter> to exit... ")
Do While Console.ReadKey(True).Key <> ConsoleKey.Enter
Loop
End Sub
End Module
' The example displays the following output:
' The time: 11/11/2015 at 4:02 PM
' The time zone: Pacific Standard Time
В следующем примере метод используется ReadKey(Boolean) для отображения сведений о клавише, нажатой пользователем, без повторения этой клавиши в консоли.
using namespace System;
void main()
{
ConsoleKeyInfo cki;
// Prevent example from ending if CTL+C is pressed.
Console::TreatControlCAsInput = true;
Console::WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
Console::WriteLine("Press the Escape (Esc) key to quit: \n");
do {
cki = Console::ReadKey(true);
Console::Write("You pressed ");
if ((cki.Modifiers & ConsoleModifiers::Alt) != ConsoleModifiers()) Console::Write("ALT+");
if ((cki.Modifiers & ConsoleModifiers::Shift) != ConsoleModifiers()) Console::Write("SHIFT+");
if ((cki.Modifiers & ConsoleModifiers::Control) != ConsoleModifiers()) Console::Write("CTL+");
Console::WriteLine("{0} (character '{1}')", cki.Key, cki.KeyChar);
} while (cki.Key != ConsoleKey::Escape);
}
// This example displays output similar to the following:
// Press any combination of CTL, ALT, and SHIFT, and a console key.
// Press the Escape (Esc) key to quit:
//
// You pressed CTL+A (character '☺')
// You pressed C (character 'c')
// You pressed CTL+C (character '♥')
// You pressed K (character 'k')
// You pressed ALT+I (character 'i')
// You pressed ALT+U (character 'u')
// You pressed ALT+SHIFT+H (character 'H')
// You pressed Escape (character '←')
using System;
class Example
{
public static void Main()
{
ConsoleKeyInfo cki;
// Prevent example from ending if CTL+C is pressed.
Console.TreatControlCAsInput = true;
Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
Console.WriteLine("Press the Escape (Esc) key to quit: \n");
do {
cki = Console.ReadKey(true);
Console.Write("You pressed ");
if ((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
if ((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
if ((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
Console.WriteLine("{0} (character '{1}')", cki.Key, cki.KeyChar);
} while (cki.Key != ConsoleKey.Escape);
}
}
// This example displays output similar to the following:
// Press any combination of CTL, ALT, and SHIFT, and a console key.
// Press the Escape (Esc) key to quit:
//
// You pressed CTL+A (character '☺')
// You pressed C (character 'c')
// You pressed CTL+C (character '♥')
// You pressed K (character 'k')
// You pressed ALT+I (character 'i')
// You pressed ALT+U (character 'u')
// You pressed ALT+SHIFT+H (character 'H')
// You pressed Escape (character '←')
open System
// Prevent example from ending if CTL+C is pressed.
Console.TreatControlCAsInput <- true
printfn "Press any combination of CTL, ALT, and SHIFT, and a console key."
printfn "Press the Escape (Esc) key to quit: \n"
let mutable cki = Unchecked.defaultof<ConsoleKeyInfo>
while cki.Key <> ConsoleKey.Escape do
cki <- Console.ReadKey true
printf "You pressed "
if int (cki.Modifiers &&& ConsoleModifiers.Alt) <> 0 then printf "ALT+"
if int (cki.Modifiers &&& ConsoleModifiers.Shift) <> 0 then printf "SHIFT+"
if int (cki.Modifiers &&& ConsoleModifiers.Control) <> 0 then printf "CTL+"
printfn $"{cki.Key} (character '{cki.KeyChar}')"
// This example displays output similar to the following:
// Press any combination of CTL, ALT, and SHIFT, and a console key.
// Press the Escape (Esc) key to quit:
//
// You pressed CTL+A (character '☺')
// You pressed C (character 'c')
// You pressed CTL+C (character '♥')
// You pressed K (character 'k')
// You pressed ALT+I (character 'i')
// You pressed ALT+U (character 'u')
// You pressed ALT+SHIFT+H (character 'H')
// You pressed Escape (character '←')
Class Example
Public Shared Sub Main()
Dim cki As ConsoleKeyInfo
' Prevent example from ending if CTL+C is pressed.
Console.TreatControlCAsInput = True
Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.")
Console.WriteLine("Press the Escape (Esc) key to quit: " + vbCrLf)
Do
cki = Console.ReadKey(True)
Console.Write("You pressed ")
If (cki.Modifiers And ConsoleModifiers.Alt) <> 0 Then Console.Write("ALT+")
If (cki.Modifiers And ConsoleModifiers.Shift) <> 0 Then Console.Write("SHIFT+")
If (cki.Modifiers And ConsoleModifiers.Control) <> 0 Then Console.Write("CTL+")
Console.WriteLine("{0} (character '{1}')", cki.Key, cki.KeyChar)
Loop While cki.Key <> ConsoleKey.Escape
End Sub
End Class
' This example displays output similar to the following:
' Press any combination of CTL, ALT, and SHIFT, and a console key.
' Press the Escape (Esc) key to quit:
'
' You pressed CTL+A (character '☺')
' You pressed C (character 'c')
' You pressed CTL+C (character '♥')
' You pressed K (character 'k')
' You pressed ALT+I (character 'i')
' You pressed ALT+U (character 'u')
' You pressed ALT+SHIFT+H (character 'H')
' You pressed Escape (character '←')
Комментарии
Метод ReadKey ожидает, то есть блокирует поток, выдающий ReadKey метод, пока не будет нажат символьная или функциональная клавиша. Символьная или функциональная клавиша может быть нажата в сочетании с одной или несколькими клавишами-модификаторами ALT, CTRL или SHIFT. Однако нажатие клавиши-модификатора само по себе не приведет к возврату ReadKey метода.
intercept
Если параметр имеет значение true
, нажатая клавиша перехватывается и не отображается в окне консоли; в противном случае отображается нажатая клавиша.
В зависимости от приложения может потребоваться использовать метод в сочетании ReadKey со свойством KeyAvailable .
Метод ReadKey считывает с клавиатуры, даже если стандартные входные данные перенаправляются в файл с SetIn помощью метода .