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;
    }
}
Другие вопросы по тегам