C# Console - hide the input from console window while typing

后端 未结 5 1925
被撕碎了的回忆
被撕碎了的回忆 2021-01-01 18:56

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, whe

相关标签:
5条回答
  • 2021-01-01 19:39

    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.

    0 讨论(0)
  • 2021-01-01 19:41

    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();
    }
    
    0 讨论(0)
  • 2021-01-01 19:48
    private static string GetPassword()
        {
            StringBuilder input = new StringBuilder();
            while (true)
            {
                int x = Console.CursorLeft;
                int y = Console.CursorTop;
                ConsoleKeyInfo key = Console.ReadKey(true);
                if (key.Key == ConsoleKey.Enter)
                {
                    Console.WriteLine();
                    break;
                }
                if (key.Key == ConsoleKey.Backspace && input.Length > 0)
                {
                    input.Remove(input.Length - 1, 1);
                    Console.SetCursorPosition(x - 1, y);
                    Console.Write(" ");
                    Console.SetCursorPosition(x - 1, y);
                }
                else if (key.Key != ConsoleKey.Backspace)
                {
                    input.Append(key.KeyChar);
                    Console.Write("*");
                }
            }
            return input.ToString();
        }
    
    0 讨论(0)
  • 2021-01-01 19:50

    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;
    }
    
    0 讨论(0)
  • 2021-01-01 19:52

    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:");
    
    0 讨论(0)
提交回复
热议问题