0

我对 TextBox 有疑问。当我在文本框中键入时,单词会自动更改。例如:“我的名字是 kumar”到“我的名字是 Kumar”,应该在 textBox1_TextChanged 事件上完成。

目前我正在休假活动中这样做

private void textBox1_Leave(object sender, EventArgs e)
{
  textBox1.Text = textBox1.Text.Substring(0, 1).ToUpper() + textBox1.Text.Substring(1);
}

请帮我完成它。提前非常感谢。:)

4

4 回答 4

7

使用TextInfo.ToTitleCase 方法

private void textBox1_Leave(object sender, EventArgs e) 
{ 

    TextInfo myTI = new CultureInfo("en-US",false).TextInfo;
    textBox1.Text = myTI.ToTitleCase(textBox1.Text)

}
于 2013-03-05T13:23:28.110 回答
2

作为上一个答案的后续,如果您将以下几行添加到正文的其余部分,您将确保保持正确的行为:

        textBox1.SelectionStart = textBox1.TextLength;
        textBox1.SelectionLength = 0;

所以完整的解决方案是:

private void textBox1_Leave(object sender, EventArgs e) 
{ 
        //Original from JW's answer
        TextInfo myTI = new CultureInfo("en-US",false).TextInfo;
        textBox1.Text = myTI.ToTitleCase(textBox1.Text);
        //New lines to ensure the cursor is always at the end of the typed string.
        textBox1.SelectionStart = textBox1.TextLength;
        textBox1.SelectionLength = 0;
}
于 2013-03-05T13:41:54.690 回答
2

这应该可以解决您的问题:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
        textBox1.Text = myTI.ToTitleCase(textBox1.Text);
        textBox1.SelectionStart = textBox1.Text.Length;
    }
于 2013-03-05T13:42:45.563 回答
1

我会在Regex这里使用 a ,因为它实现起来更简单,而且我认为您TextBox不会持有大字符串。由于您希望在编写时自动更正字符串,因此您需要TextChanged事件而不是事件Leave

private void textBox1_TextChanged(object sender, EventArgs e)
{
    Regex regex = new Regex(" [a-z]");
    foreach (Match match in regex.Matches(textBox1.Text))
        textBox1.Text = regex.Replace(textBox1.Text, match.Value.ToUpper());
}
于 2013-03-05T13:42:51.007 回答