我想在登录屏幕上使用带遮罩(*
)的文本框,但是我想用星号*
遮罩每个字符,但最后键入的字母除外(在清除文字)。
例如,当密码为123
且我输入1
时,文本框的内容将显示为1
(因为这是最后输入的字母)。但是,当我在2
之后输入1
时,文本框的内容将显示为*2
,当我键入3
时,文本框的内容将显示为{{1 }}。
但是我无法解决算法:
**3
这是我到目前为止所得到的。 private void txtPw_TextChanged(object sender, EventArgs e)
{
string inputString = txtPw.Text;
int index = inputString.Length;
// char lastChar = inputString[inputString.Length-1];
txtPw.Text = "";
tempPassword += lastChar;
for(int i=0;i<(index-1);i++)
{
txtPw.Text += "*";
}
txtPw.Text += lastChar;
}
用于检查ID pw inf。
作为附加信息:Visual Studio在注释行中告诉我:tempPassword
(如果有帮助)。
感谢您的帮助
答案 0 :(得分:0)
虽然这不是一个完美的答案,但是如果您只允许人们更改字符串中输入的最后一个字符(即密码末尾的空格或新字母),则可以按要求屏蔽字符在末尾)。出于可用性的考虑,它还使用了一个名为“ currentPassword”的全局变量,以便您稍后检查它是否正确。
可以使用子功能进一步优化和修改此代码,以减少行数,但我尝试将其保留在一个代码中,以使复制和粘贴更加容易。
亲切的问候, 阴影
string currentPassword = "";
private void textBox1_TextChanged(object sender, EventArgs e)
{
var currentInputBox = sender as TextBox; // More general way to handle inputs for a text event if using multiple text boxes all with the same function
var inputString = currentInputBox.Text;
if (inputString.Length > currentPassword.Length) // Adds the new letter to the global variable currentPassword and then masks the original text box used
{
var newChar = inputString.Substring(inputString.Length - 1);
currentPassword += newChar;
var newBoxText = "";
for (int i = 0; i < currentPassword.Length - 1; i++)
{
newBoxText += "*";
}
newBoxText += newChar;
currentInputBox.Text = newBoxText;
}
else if ((inputString.Length < currentPassword.Length) && (inputString.Length > 0)) // Removes characters from the currentPassword field til it matches the length of the textbox field and then exposes a single character at the end
{
currentPassword = currentPassword.Remove(inputString.Length, currentPassword.Length - inputString.Length);
var newBoxText = "";
for (int i = 0; i < currentPassword.Length - 1; i++)
{
newBoxText += "*";
}
newBoxText += currentPassword.Substring(currentPassword.Length - 1);
currentInputBox.Text = newBoxText;
}
}
答案 1 :(得分:0)
因此,this article讨论了如何使用jQuery在Web上创建iPhone样式的密码输入框。但是,基于代码,我假设您正在尝试在WinForms或WPF中执行类似的操作。
因此,一般的解决方案需要以下条件:
Control.KeyPress
事件的代码因此,您最终得到两个字符串-在文本框中打印的项目符号字符串和实际字符串。如果您使用的是WPF,您甚至可以编写一个精美的值转换器来自动处理。
作为考虑,您还需要考虑如果用户选择一个子字符串并决定替换文本(您在键入时显示该特定字符)会发生什么情况?为您编写一个完全控制的控件似乎有些繁琐,但是希望这会给您一些有关如何进行的想法。