我试图阻止某些角色成为大写,而所有其他角色必须是。
例如,如果我在文本框中写了一些内容,它会自动将所有字符写成大写,但每次输入字母“k”时,它都必须是小写的。
有没有人知道实现这个目标的方法?
private void textBox3_TextChanged(object sender, EventArgs e)
{
// Navn/Name Text Box
}
答案 0 :(得分:4)
在textBox3_TextChanged
事件处理程序中,您可以简单地“更正”文本并将其设置回来
您必须记住光标位置(和选择),以便用户在输入时不会被打断:
private void textBox3_TextChanged(object sender, EventArgs e)
{
int start = textBox3.SelectionStart;
int length = textBox3.SelectionLength;
textBox3.Text = textBox3.Text.ToUpper().Replace("K", "k");
textBox3.SelectionStart = start;
textBox3.SelectionLength = length;
}
注意:这适用于Windows.Forms。我想对于wpf或asp或其他ui框架,光标处理的部分会有所不同。
答案 1 :(得分:2)
这里有一种方法
private void textBox3_TextChanged(object sender, EventArgs e)
{
textBox3.Text = new string(textBox3.Text.Select(x => x == 'k' || x == 'K' ? 'k' : char.ToUpper(x)).ToArray());
}
答案 2 :(得分:0)
最后,保存新字符串,并将插入符号返回到其位置。
private static bool CalculateConditionForLowerCase(string stringLetter)
{
return stringLetter.ToLower() == "k";
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
return;
}
var caretPosition = textBox1.SelectionStart;
var sb = new StringBuilder();
foreach (var letter in textBox1.Text)
{
var stringLetter = letter.ToString();
sb.Append(CalculateConditionForLowerCase(stringLetter) ? stringLetter.ToLower() : stringLetter.ToUpper());
}
textBox1.Text = sb.ToString();
textBox1.SelectionStart = caretPosition;
}
答案 3 :(得分:-1)
如果您不想让用户输入无效输入,您可以使用TextChanged事件(其他答案)或处理KeyDown和KeyUp事件。检查此链接以了解其他方法。
https://msdn.microsoft.com/en-us/library/ms171537(v=vs.110).aspx