当 TextBox 获得焦点而不移动光标时,使用 Up/Down 键滚动 ListBox
Use Up/Down keys to scroll a ListBox when a TextBox has focus without moving cursor
我有一个 TextBox
供用户输入搜索词,还有一个 ListBox
用于显示结果。还有一个按钮将根据单击时选择的项目显示一些信息。
我正在尝试使用向上和向下箭头键滚动列表框,这样用户就不必依次单击项目和按钮。那时我还不如只依靠双击事件来完成工作,因为它们已经在项目上了。但是,我正在努力使它更 "keyboard only friendly".
以下代码有效,但有一个小缺陷:
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,我基本上是在尝试模仿该配置的行为 window。
您应该使用 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.Down
或 Keys.Up
,我设置 e.Handled = true;
,而不考虑 SelectedIndex
以完全禁用使用这些键移动插入符号。
我有一个 TextBox
供用户输入搜索词,还有一个 ListBox
用于显示结果。还有一个按钮将根据单击时选择的项目显示一些信息。
我正在尝试使用向上和向下箭头键滚动列表框,这样用户就不必依次单击项目和按钮。那时我还不如只依靠双击事件来完成工作,因为它们已经在项目上了。但是,我正在努力使它更 "keyboard only friendly".
以下代码有效,但有一个小缺陷:
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,我基本上是在尝试模仿该配置的行为 window。
您应该使用 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.Down
或 Keys.Up
,我设置 e.Handled = true;
,而不考虑 SelectedIndex
以完全禁用使用这些键移动插入符号。