2015-02-19 2 views
0

У меня есть список с предыдущими записями моего TextBox. Используя KeyUp/KeyDown Я могу просмотреть этот список, отображающий текст в TextBox.TextBox Установить курсор в конце после KeyUp или KeyDown

Установка другой строки в TextBox редактирования курсора должен быть в конце строки в Te выделенного текста xtBox. myTextBox.Select (RTextBox.Text.Length, 0); здесь очень полезен, но после KeyUp это устанавливает курсор не в конце текста, это один символ раньше. После KeyDown его в конце, правильно. Я думаю, согласно объявлению preview текущий символ еще не вычисляется, но даже добавление +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; 
      } 
     } 

Так что я думаю, что я должен установить cursore после PreviewKeyDown -Event но в случае KeyUp/KeyDown Я не знаю, если это вообще возможно.

Любое другое событие, в котором я должен установить курсор?

Редактировать: Я использую WinForms.

ответ

0

Попробуйте добавить эту строку, если это 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; 
    } 
} 
+0

_PreviewKeyDownEventArgs_ не имеет возможностей для _e.Handled_ – Sundancer

+0

Ой извините, я думал, что вы используете WPF. Используете ли вы Windows Forms? –

+0

Я обновил свой ответ: тогда вам нужно использовать событие KeyDown. –