当TextBox具有焦点而不移动光标

时间:2015-10-27 16:07:38

标签: c# winforms textbox listbox

我有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,我试图模仿那个配置窗口的行为,基本上就是这样。

1 个答案:

答案 0 :(得分:4)

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

如果密钥为e.Handled = true;Keys.Down,我设置Keys.Up,无论SelectedIndex是否使用这些密钥完全禁用移动插入符号。