C#实现在控制台的密码输入(含星号和退格功能)

发布于 2015-04-21  856 次阅读


EnterPasswd
按照我的一贯风格,废话不说,直接上代码

/* 本段代码使用 “天书我勒个去我还是相信中国开源的 V0.9” 协议发布
 * 如果您需在发布(包含商业与非商业)的软件中使用本代码,只需告知作者四季天书并在软件的关于里加上天书的名字即可
 * 因为我还是相信中国开源的。。。
 */
static string EnterPasswd()
{
    while (true)
    {
        Console.Write("请输入密码>");
        string key = string.Empty;
        while (true)
        {
            ConsoleKeyInfo keyinfo = Console.ReadKey(true);
            if (keyinfo.Key == ConsoleKey.Enter) //按下回车,结束
                break;
            else if (keyinfo.Key == ConsoleKey.Backspace && key.Length > 0) //如果是退格键并且字符没有删光
            {
                Console.Write("\b \b"); //输出一个退格(此时光标向左走了一位),然后输出一个空格取代最后一个星号,然后再往前走一位,也就是说其实后面有一个空格但是你看不见= =
                key = key.Substring(0, key.Length - 1);
            }

            else if (!char.IsControl(keyinfo.KeyChar)) //过滤掉功能按键等
            {
                key += keyinfo.KeyChar.ToString();
                Console.Write("*");
            }
        }
        return key;
    }
}

你们自己看吧,我觉得已经没什么 bug 了。。。

使用演示到这里(链接到 Github)看吧

天书 2014 年 9 月后的第一篇文章(本文)竟然是生病请假在家写的。。。


寻找属于自己的1%