2016-09-16 142 views
1

我想創建一個屏幕,用戶將能夠用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); 
+5

您是否知道Console.ReadLine()?已經做到了你想要的我想。 –

回答

1

你忘了做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(" "); 
}