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

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