TextBox在KeyUp或KeyDown之后设置光标

时间:2015-02-19 12:22:27

标签: c# winforms textbox cursor keydown

我有一个列表,其中包含 TextBox 的先前条目。通过使用 KeyUp / KeyDown ,我可以滚动浏览此列表,显示TextBox中的文本。

TextBox 中设置另一个字符串edit-cursor应位于Te 强调文本 xtBox中字符串的末尾。 myTextBox.Select(RTextBox.Text.Length,0); 在这里非常有用,但在 KeyUp 之后,这是将光标设置在文本的末尾,它是&#39 ;之前是一个角色。在 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之后设置cursore但是在 KeyUp / KeyDown 的情况下我不会#39 ; t。知道这是否可行。

我应该设置光标的任何其他事件吗?

编辑:我正在使用WinForms。

1 个答案:

答案 0 :(得分:0)

尝试添加此行,如果它是Keys.UpKeys.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;
    }
}