TextBox 在 KeyUp 或 KeyDown 之后的末尾设置光标

TextBox Set Cursor at end after KeyUp or KeyDown

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

TextBox 中设置另一个字符串,编辑光标应位于 Teemphasized textxtBox 中字符串的末尾。 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;
            }
         }

所以我认为我必须在 PreviewKeyDown-Event 之后设置光标,但在 KeyUp / [=21= 的情况下]KeyDown我完全不知道这是否可行

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

编辑:我正在使用 WinForms。

如果是 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;
    }
}