C# 文本框:密码字符(将单词的字母逐个改为星号)

C# 文本框:密码字符(将单词的字母逐个改为星号),c#,winforms,textbox,C#,Winforms,Textbox,登录表单中的密码文本框有问题。我希望它比其他的更精确,这就是我想知道的: 我会在文本框中写上“password”一词,如果我键入第一个字母“p”,我会看到它是字母p,如果我键入第二个字母“a”,字母“p”现在将变成“*”,而第二个字母也可以被看作是“a”,然后一直到“password”一词变成“**********d”。如果我离开这个文本框,剩下的字母也会变成“*”。 我试图转到属性并查找密码字符,但它不符合我的需要。 我该怎么做呢?在这里,我为您创建了一个简单的示例,它基于Textbox控件的

登录表单中的密码文本框有问题。我希望它比其他的更精确,这就是我想知道的:

我会在文本框中写上“password”一词,如果我键入第一个字母“p”,我会看到它是字母p,如果我键入第二个字母“a”,字母“p”现在将变成“*”,而第二个字母也可以被看作是“a”,然后一直到“password”一词变成“**********d”。如果我离开这个文本框,剩下的字母也会变成“*”。 我试图转到属性并查找密码字符,但它不符合我的需要。
我该怎么做呢?

在这里,我为您创建了一个简单的示例,它基于Textbox控件的向上键离开事件

有了这段代码,您需要做一些额外的工作才能让它变得完美,比如:

忽略非字母数字和特殊字符的键,如上键上的空格、回车、Shift、回车和…)

测试并享受……;)


这应该很简单。你尝试过什么?看看你可以订阅的活动。查找类似
TextChanged
LostFocus
Leave
,等等。您甚至没有告诉我们这是什么类型的项目。我试图将文本框“passwordchar”的属性更改为“”。但它把整个词变成了“我们知道你想做什么;但我想看到你的努力。接受@Grantwiney的建议,看看这些活动。在这些活动中你应该做些什么?修改文本以匹配您的密码规范!什么是realpass?它为您保留真正插入的密码。阅读以上答案的结尾。
    private void txtxPassword_KeyUp(object sender, KeyEventArgs e)
    {
        var pass = txtxPassword.Text;
        if (pass.Length < 1)
            realPass = string.Empty;
        else
            realPass += pass[pass.Length - 1];


        if (e.KeyCode == Keys.Back)
        {
            if (realPass.Length <= 1)
                realPass = "";
            else
            {
                realPass = realPass.Substring(0, realPass.Length - 2);
            }
        }
        string result = "";
        if (realPass != string.Empty)
        {

            for (var i = 0; i < realPass.Length - 1; i++)
            {
                result += "X";
            }
            result += realPass[realPass.Length - 1];
        }

            txtxPassword.Text = result;
            txtxPassword.SelectionStart = result.Length;
            lblpass.Text = realPass;
        }

    private void txtxPassword_Leave(object sender, EventArgs e)
    {
        string result="";
        for (var i = 0; i < realPass.Length ; i++)
            {
                result += "X";
            }
        txtxPassword.Text = result;
        lblpass.Text = realPass;
    }
   private string realPass="";