我试过下面的代码...
string pass = "";
Console.Write("Enter your password: ");
ConsoleKeyInfo key;
do
{
key = Console.ReadKey(true);
// Backspace Should Not Work
if (key.Key != ConsoleKey.Backspace)
{
pass += key.KeyChar;
Console.Write("*");
}
else
{
Console.Write("\b");
}
}
// Stops Receving Keys Once Enter is Pressed
while (key.Key != ConsoleKey.Enter);
Console.WriteLine();
Console.WriteLine("The Password You entered is : " + pass);
但这种方式在输入密码时退格键功能不起作用。 有什么建议吗?
最佳答案
Console.Write("\b\b");
将从屏幕上删除星号字符,但您的 else
block 中没有任何代码从您的 pass
字符串变量中删除先前输入的字符。
下面是相关的工作代码,可以满足您的要求:
var pass = string.Empty;
ConsoleKey key;
do
{
var keyInfo = Console.ReadKey(intercept: true);
key = keyInfo.Key;
if (key == ConsoleKey.Backspace && pass.Length > 0)
{
Console.Write("\b \b");
pass = pass[0..^1];
}
else if (!char.IsControl(keyInfo.KeyChar))
{
Console.Write("*");
pass += keyInfo.KeyChar;
}
} while (key != ConsoleKey.Enter);
关于c# - 密码屏蔽控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3404421/