将字符串的所有字符转换为大写,某些特定字符除外
Convert all characters of a string to uppercase, except for some specific characters
我试图防止某些字符大写,而所有其他字符必须大写。
举个例子,如果我在文本框中写东西,它会自动将所有字符写成大写,但每次我输入字母 "k" 时,它都必须是小写。
有人知道实现这个的方法吗?
private void textBox3_TextChanged(object sender, EventArgs e)
{
// Navn/Name Text Box
}
这是一种方法
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());
}
在您的 textBox3_TextChanged
事件处理程序中,您可以简单地 "correct" 文本并将其设置回去。
您必须记住光标位置(和选择),以便用户在键入时不会被打扰:
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 框架,游标处理的部分会有所不同。
如果您不想让用户输入无效的输入,您可以使用TextChanged 事件(其他答案)或处理KeyDown 和KeyUp 事件。检查此 link 以了解其他方法。
https://msdn.microsoft.com/en-us/library/ms171537(v=vs.110).aspx
- 首先,保持插入符位置 - 光标所在的位置。
- 然后,您计算新字符串 - 我提取了条件以防它不仅仅是 1 个字母。
最后,保存新字符串,return插入符号到它的位置。
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;
}
我试图防止某些字符大写,而所有其他字符必须大写。
举个例子,如果我在文本框中写东西,它会自动将所有字符写成大写,但每次我输入字母 "k" 时,它都必须是小写。
有人知道实现这个的方法吗?
private void textBox3_TextChanged(object sender, EventArgs e)
{
// Navn/Name Text Box
}
这是一种方法
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());
}
在您的 textBox3_TextChanged
事件处理程序中,您可以简单地 "correct" 文本并将其设置回去。
您必须记住光标位置(和选择),以便用户在键入时不会被打扰:
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 框架,游标处理的部分会有所不同。
如果您不想让用户输入无效的输入,您可以使用TextChanged 事件(其他答案)或处理KeyDown 和KeyUp 事件。检查此 link 以了解其他方法。
https://msdn.microsoft.com/en-us/library/ms171537(v=vs.110).aspx
- 首先,保持插入符位置 - 光标所在的位置。
- 然后,您计算新字符串 - 我提取了条件以防它不仅仅是 1 个字母。
最后,保存新字符串,return插入符号到它的位置。
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; }