如何将文本框插入符号移到右侧

时间:2009-07-24 14:17:08

标签: c# textbox keypress

我想将输入文本框的所有字符更改为大写字母。代码将添加字符,但如何将插入符号移到右侧?

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
    textBox3.Text += e.KeyChar.ToString().ToUpper();
    e.Handled = true;
}

6 个答案:

答案 0 :(得分:18)

TextBox的{​​{3}}属性设置为Upper;那么你不需要手动处理它。

请注意,textBox3.Text += e.KeyChar.ToString().ToUpper();会将新字符附加到字符串的末尾,即使输入插入符号位于字符串的中间(大多数用户会发现它非常混乱)。出于同样的原因,我们不能假设在输入字符后输入插入符应出现在字符串的末尾。

如果您仍然真的想在代码中执行此操作,那么这样的事情应该有效:

// needed for backspace and such to work
if (char.IsControl(e.KeyChar)) 
{
    return;
}
int selStart = textBox3.SelectionStart;
string before = textBox3.Text.Substring(0, selStart);
string after = textBox3.Text.Substring(before.Length);
textBox3.Text = string.Concat(before, e.KeyChar.ToString().ToUpper(), after);
textBox3.SelectionStart = before.Length + 1;
e.Handled = true;

答案 1 :(得分:12)

            tbNumber.SelectionStart = tbNumber.Text.ToCharArray().Length;
            tbNumber.SelectionLength = 0;

答案 2 :(得分:2)

private void txtID_TextChanged(object sender, EventArgs e)
{
    txtID.Text = txtID.Text.ToUpper();
    txtID.SelectionStart = txtID.Text.Length;
}

答案 3 :(得分:1)

这将保留插入点的位置(但我会按照FredrikMörk给出的答案继续)

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)    
{        
    int selStart = textBox3.SelectionStart;
    textBox3.Text += e.KeyChar.ToString().ToUpper();        
    textBox3.SelectionStart = selStart;
    e.Handled = true;  
}

SelectionStart实际上可能被称为SelStart,我目前没有编译器。

答案 4 :(得分:1)

如果您必须手动执行此操作,则可以使用

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
    textBox3.Text += e.KeyChar.ToString().ToUpper();
    textBox3.SelectionStart = textBox3.Text.Length;
    e.Handled = true;
}

但前面的代码会在文本末尾插入新字符。如果要将其插入光标所在的位置:

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
{
    int selStart = textBox3.SelectionStart;
    textBox3.Text = textBox3.Text.Insert(selStart,e.KeyChar.ToString().ToUpper());
    textBox3.SelectionStart = selStart + 1;
    e.Handled = true;
}

此代码在光标位置插入新字符,并将光标移动到新插入字符的左侧。

但我仍然认为设置CharacterCasing会更好。

答案 5 :(得分:0)

另一种方法是只改变KeyChar本身的值:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
        if ((int)e.KeyChar >= 97 && (int)e.KeyChar <= 122) {
            e.KeyChar = (char)((int)e.KeyChar & 0xDF);
        }
    }

尽管使用CharacterCasing属性是最简单的解决方案。