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

时间:2017-01-02 10:36:42

标签: c# winforms textbox uppercase lowercase

我试图阻止某些角色成为大写,而所有其他角色必须是。

例如,如果我在文本框中写了一些内容,它会自动将所有字符写成大写,但每次输入字母“k”时,它都必须是小写的。

有没有人知道实现这个目标的方法?

private void textBox3_TextChanged(object sender, EventArgs e)
{
    // Navn/Name Text Box 


}

4 个答案:

答案 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)

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

答案 3 :(得分:-1)

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

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