【问题标题】:TextBox Set Cursor at end after KeyUp or KeyDown文本框在 KeyUp 或 KeyDown 之后设置光标
【发布时间】:2015-02-19 12:22:26
【问题描述】:

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

在 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;
            }
         }

所以我认为我必须在 PreviewKeyDown-Event 之后设置光标,但在 KeyUp / KeyDown 的情况下我不知道这是否可能。

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

编辑:我正在使用 WinForms。

【问题讨论】:

    标签: c# winforms textbox cursor keydown


    【解决方案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;
        }
    }
    

    【讨论】:

    • PreviewKeyDownEventArgs 不可能用于 e.Handled
    • 抱歉,我以为您使用的是 WPF。你在使用 Windows 窗体吗?
    • 我更新了我的答案:那你必须使用KeyDown 事件。
    • 谢谢!我应该知道,当新角色尚未在预览事件中计算时,必须有另一个事件。谢谢!
    • 很高兴为您提供帮助,如果此答案解决了您的问题,请单击答案旁边的复选标记将其标记为已接受。请参阅:How does accepting an answer work? 了解更多信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多