TextBox Установить курсор в конце после KeyUp или KeyDown
У меня есть список с предыдущими записями моего TextBox. Используя KeyUp / KeyDown, я могу прокручивать этот список, показывая текст в TextBox.
Устанавливая другую строку в TextBox, курсор редактирования должен находиться в конце строки в выделенном Teтексте xtBox. myTextBox.Select (RTextBox.Text.Length, 0); здесь очень полезно, но после KeyUp это установка курсора не в конце текста, а на один символ раньше. После KeyDown его в конце исправьте. Я предполагаю, что согласно предварительному просмотру имен, текущий персонаж еще не рассчитан, но даже добавление +1 к длине не работает.
private void MyTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyValue)
{
case (char)Keys.Up:
myTextBox.Text = GetNewText();
myTextBox.Select(myTextBox.Text.Length, 0);
break;
case (char)Keys.Down:
myTextBox.Text = GetNewText();
myTextBox.Select(myTextBox.Text.Length, 0);
break;
}
}
private void MyTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
switch (e.KeyChar)
{
case (char)Keys.Up:
// I'd guess setting the cursor here would be perfect
// but KeyUp/KeyDown can't be caught here, unfortunately
myTextBox.Select(RTextBox.Text.Length, 0);
break;
}
}
Поэтому я думаю, что мне нужно установить курсор после PreviewKeyDown-Event, но в случае KeyUp / KeyDown я не знаю, возможно ли это вообще.
Любое другое событие, где я должен установить курсор?
Изменить: я использую WinForms.
1 ответ
Попробуйте добавить эту строку, если это Keys.Up
или Keys.Down
и использовать KeyDown
событие:
e.Handled = true;
Это означает, что нормальное поведение пропускается. В конце у вас есть это:
private void MyTextBox_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyValue)
{
case (char)Keys.Up:
e.Handled = true;
myTextBox.Text = GetNewText();
myTextBox.Select(myTextBox.Text.Length, 0);
break;
case (char)Keys.Down:
e.Handled = true;
myTextBox.Text = GetNewText();
myTextBox.Select(myTextBox.Text.Length, 0);
break;
}
}