Ввод только цифр в консоли с поддержкой Backspace

Пытаюсь создать метод который позволит писать только цифры с backspace дополнением (для удаления)

public static string LockInput(bool status = true) 
{
   while (true)
   {
      ConsoleKeyInfo a = Console.ReadKey(status);
      string str = string.Empty;
      char number = a.KeyChar;
      if (char.IsDigit(number) && number != 8 && number != 46)
      {
         Console.Write(number); 
         str += number;
      }
      if (number == 8)
      {
         Console.SetCursorPosition(Console.CursorLeft, Console.CursorTop);
         if (str.Length > 0) { str = str.Substring(0, str.Length - 1); }
         Console.SetCursorPosition(Console.CursorLeft + str.Length, Console.CursorTop);
      }
   }
}

В консоль могу писать только цифры, но удаление не работает, как исправить?


Ответы (1 шт):

Автор решения: aepot

Как-то так это делается.

public static string ReadDigits()
{
    StringBuilder sb = new StringBuilder();
    ConsoleKey key;
    do
    {
        ConsoleKeyInfo keyInfo = Console.ReadKey(true);
        key = keyInfo.Key;

        if (key == ConsoleKey.Backspace && sb.Length > 0)
        {
            Console.Write("\b \b");
            sb.Length--;
        }
        else if (char.IsDigit(keyInfo.KeyChar))
        {
            Console.Write(keyInfo.KeyChar);
            sb.Append(keyInfo.KeyChar);
        }
    } while (key != ConsoleKey.Enter);
    Console.WriteLine();
    return sb.ToString();
}
→ Ссылка