【问题标题】:Use Up/Down keys to scroll a ListBox when a TextBox has focus without moving cursor当文本框有焦点而不移动光标时,使用向上/向下键滚动列表框
【发布时间】:2016-01-27 03:45:25
【问题描述】:

我有一个TextBox,用户可以在其中输入搜索词,还有一个ListBox,可以显示结果。还有一个按钮将根据单击时选择的项目显示一些信息。

我正在尝试使用向上和向下箭头键滚动列表框,这样用户就不必单击项目,然后单击按钮。那时我还不如只依靠双击事件来完成工作,因为它们已经在项目上。但是,我正试图让这个更“只对键盘友好”。
以下代码有效,但有一个小缺陷:

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,我基本上是在尝试模仿该配置窗口的行为。

【问题讨论】:

    标签: c# winforms textbox listbox


    【解决方案1】:

    您应该使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多