繁体   English   中英

将字符串的所有字符转换为大写,除了某些特定的字符

[英]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 


}

在您的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框架,带有游标处理的部分将有所不同。

这里一种方法

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());
}
  1. 首先,保持插入符号的位置-光标所在的位置。
  2. 然后,您计算新的字符串-我提取了条件,以防它不只是1个字母。
  3. 最后,保存新字符串,然后将插入符号返回到其位置。

     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; } 

如果不想让用户输入无效的输入,则可以使用TextChanged事件(其他答案)或处理KeyDown和KeyUp事件。 检查此链接以了解其他方法。

https://msdn.microsoft.com/zh-CN/library/ms171537(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM