C# Console - hide the input from console window wh

2019-02-08 17:01发布

问题:

I'm using Console.ReadLineto read the input of the user. However, I want to hide/exclude the inputted text on the console screen while typing. For example, when the user writes "a", it writes "a" to the console and then I will have a variable with the value "a". However, I don't want "a" to be written on the console's output.

How can I do that?

回答1:

Here is a short implementation. thx @ojblass for the idea

System.Console.Write("password: ");
string password = null;
while (true)
{
    var key = System.Console.ReadKey(true);
    if (key.Key == ConsoleKey.Enter)
        break;
    password += key.KeyChar;
}


回答2:

Console.ReadKey(true) hides the user key. I do not believe Console.Read() offers such a capability. If necessary you can sit in a loop reading keys one at a time until enter is pressed. See this link for an example.



回答3:

I created this method from the code in the answer by dataCore and the suggestion by m4tt1mus. I also added support for the backspace key.

private static string GetHiddenConsoleInput()
{
    StringBuilder input = new StringBuilder();
    while (true)
    {
        var key = Console.ReadKey(true);
        if (key.Key == ConsoleKey.Enter) break;
        if (key.Key == ConsoleKey.Backspace && input.Length > 0) input.Remove(input.Length - 1, 1);
        else if (key.Key != ConsoleKey.Backspace) input.Append(key.KeyChar);
    }
    return input.ToString();
}


回答4:

I just changed the foreground colour to black while the password was being inputted. I a newbie so it's probably a bad idea but it worked for the challenge i was trying

Console.WriteLine("Welcome to our system. Please create a UserName");
        var userName = Console.ReadLine();
        Console.WriteLine("Now please create a password");
        Console.ForegroundColor = ConsoleColor.Black;
        var password = Console.ReadLine();
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("Okay, let's get you logged in:");