Как переместить курсор 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;
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 является самым простым решением.