Backspace 在 C# 控制台中的 StringBuilder 中无法正常工作

问题描述 投票:0回答:2

我正在尝试创建一个屏幕,用户可以在其中使用 StringBuilder 写下他们的名字。

我遇到的问题是退格键的功能。我可以删除除按下的第一个字母之外的所有字母。另外,好像我可以按任何字符,它就会被提交。

ConsoleKeyInfo cki = new ConsoleKeyInfo();
bool enterPressed = false;
StringBuilder name = new StringBuilder();
int temp = 61;
do
{
    Console.SetCursorPosition(temp, 14);
    cki = Console.ReadKey(true);
    if (cki.Key == ConsoleKey.Enter && name.Length > 0 && name.Length < 12)
    {
        enterPressed = true;
        Console.SetCursorPosition(61, 18);
        Console.Write(name);
    }
    else if ("qwertyuiopasdfghjklzxcvbnm".Contains(cki.KeyChar) && name.Length < 12)
    {
         name.Append(cki.KeyChar);
         Console.Write(cki.KeyChar);
         temp += 1;
    }
    else if(cki.Key == ConsoleKey.Backspace && name.Length > 0)
    {
         name.Remove(name.Length-1, 1);
         Console.Write("\b \b");
    }
} while (name.Length > 0 && !enterPressed);
c# string console-application keyboard-events backspace
2个回答
3
投票

你忘了做

temp--;
这段代码应该可以解决您的问题

                name.Remove(name.Length - 1, 1);
                temp--;
                Console.Write("\b \b");

1
投票

您可以尝试以下代码

  console.Writeline("Enter Your Name");
  string name= console.Readline();

如果您不想使用上述解决方案,则可以更新以下内容。

if(cki.Key == ConsoleKey.Backspace && name.Length >= 0)
{
    if (name.Length == 0)
    {
        name.Remove(0, 0);
    }
    else
    {
        name.Remove(name.Length - 1, 1);
    }
     temp--;
    Console.Write(" ");   
}
© www.soinside.com 2019 - 2024. All rights reserved.