Как переместить курсор textbox вправо

Я хотел бы изменить все символы, введенные в текстовое поле в верхний регистр. Код добавит символ, но как переместить курсор вправо?

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

6 ответов


установить CharacterCasing свойства TextBox to 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;

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

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

это сохранит местоположение точки вставки (но лично я бы пошел с ответом, данным Фредриком Мерком)

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, у меня нет компилятора под рукой на данный момент.


Если вы должны сделать это вручную, вы можете использовать

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 лучше.


другой метод - просто изменить значение самого 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 является самым простым решением.