当文本框具有焦点时,使用上/下方向键滚动 ListBox 而不移动光标

4
我有一个文本框,用户可以在其中输入搜索词,还有一个列表框用于显示结果。此外,还有一个按钮,点击后将显示根据所选项推断出的一些信息。
我想要通过上下箭头键来滚动列表框,以便用户不必单击该项,再单击按钮。这里,我需要使其更加“友好”,使用户只需使用键盘。以下代码可以工作,但存在一个小缺陷:
private void txtSearchTerm_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Down && Results.SelectedIndex < (Results.Items.Count - 1))
    {
        Results.SelectedIndex++;
    }
    else if (e.KeyCode == Keys.Up && Results.SelectedIndex > 0)
    {
        Results.SelectedIndex--;
    }
}  

使用此代码后,光标仍会左右移动,而选择的项目也会相应地更改。 我希望它保持在原地(不强制将其移到最后)。 我没有在txtSearchTerm.Select(...)事件中找到任何有用的信息,但我猜我可能错过了什么......
虽然有一个TextChanged事件,但它只调用一个我编写的搜索函数,该函数会在用户输入时填充列表框,因此出于简单起见,我将省略该代码。
我是否缺少某些方法或忽视了一些使此TextBox / ListBox组合按照我的意图工作的方法?
快速说明:如果您曾经使用过UltraEdit,则我正在尝试模仿该配置窗口的行为。
1个回答

6

您应该使用e.Handled = true;来取消您所处理的键的使用:

private void txtSearchTerm_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Down)
    {
        if (Results.SelectedIndex < (Results.Items.Count - 1))
            Results.SelectedIndex++;
        e.Handled = true;
    }
    else if (e.KeyCode == Keys.Up)
    {
        if (Results.SelectedIndex > 0)
            Results.SelectedIndex--;
        e.Handled = true;
    }
}

如果键是 Keys.DownKeys.Up,我会设置 e.Handled = true;,而不考虑 SelectedIndex,以完全禁用使用这些键移动插入符号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接