Считывание стрелок на С#
Как мне считывать нажатия клавиш на С#? Я пробовал метод Console.ReadKey(), но получается, если нажать 2 раза. А проверка с Enter работает с первого раза. Вот код:
using System;
public class Test
{
public static void Main(string[] args)
{
while (Console.ReadKey().Key != ConsoleKey.Enter)
{
ConsoleKey key = Console.ReadKey();
if (key == ConsoleKey.UpArrow) Console.WriteLine("Вверх");
else if (key == ConsoleKey.DownArrow) Console.WriteLine("Вниз");
else if (key == ConsoleKey.RightArrow) Console.WriteLine("Вправо");
else if (key == ConsoleKey.LeftArrow) Console.WriteLine("Влево");
}
}
}
P.s. я смотрел как использовать Console.ReadKey() с официального ссайта Microsoft (корпорации-создателя C#)
Ответы (3 шт):
Автор решения: CrazyElf
→ Ссылка
Вы так одно нажатие на проверку Enter. Попробуйте так:
while (true)
{
ConsoleKey key = Console.ReadKey().Key;
if (key == ConsoleKey.Enter)
break;
if (key == ConsoleKey.UpArrow) Console.WriteLine("Вверх");
else if (key == ConsoleKey.DownArrow) Console.WriteLine("Вниз");
else if (key == ConsoleKey.RightArrow) Console.WriteLine("Вправо");
else if (key == ConsoleKey.LeftArrow) Console.WriteLine("Влево");
}
Но ещё лучше, конечно, через switch проверять, как в другом ответе.
Автор решения: Konst
→ Ссылка
не совсем ясна задача, что вы решаете, но попробуйте так:
static void Main(string[] args)
{
while (true)
{
ConsoleKeyInfo info = Console.ReadKey();
ConsoleKey key = info.Key;
string msg = String.Empty;
switch (key)
{
case ConsoleKey.UpArrow:
msg = "Вверх";
break;
case ConsoleKey.DownArrow:
msg = "Вниз";
break;
case ConsoleKey.RightArrow:
msg = "Вправо";
break;
case ConsoleKey.LeftArrow:
msg = "Влево";
break;
default:
break;
}
if (!string.IsNullOrEmpty(msg))
{
Console.WriteLine(msg);
}
}
}
Автор решения: aepot
→ Ссылка
Вы дважды выполняете Console.ReadKey() за одну итерацию цикла, поэтому и нажатия требуется два, а не одно.
static void Main(string[] args)
{
ConsoleKey key;
while ((key = Console.ReadKey(true).Key) != ConsoleKey.Enter)
{
switch (key)
{
case ConsoleKey.UpArrow:
Console.WriteLine("Вверх");
break;
case ConsoleKey.DownArrow:
Console.WriteLine("Вниз");
break;
case ConsoleKey.RightArrow:
Console.WriteLine("Вправо");
break;
case ConsoleKey.LeftArrow:
Console.WriteLine("Влево");
break;
}
}
}