我有一个显示数组内容的列表框。当按下“go”按钮时,数组会填充一个结果列表。
go按钮在表单属性上设置为AcceptButton,因此在表单焦点的任意位置按Enter键会重新运行go按钮进程。
双击列表框中数组的结果可以正常使用以下内容:
void ListBox1_DoubleClick(object sender, EventArgs e) {}
我希望能够使用我的箭头键并输入键来选择和运行事件,而无需双击列表框中的行。 (不过每次都会按下按钮运行)
基本打开表单,输入搜索字符串,按Enter键运行go按钮,使用向上和向下箭头然后按Enter键选择运行相同的事件,如上面的双击。需要在每一位之后改变焦点。
答案 0 :(得分:7)
您可以处理要覆盖的控件的KeyDown
事件。例如,
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
//execute go button method
GoButtonMethod();
//or if it's an event handler (should be a method)
GoButton_Click(null,null);
}
}
这将执行搜索。然后,您可以关注列表框
myListBox.Focus();
//you might need to select one value to allow arrow keys
myListBox.SelectedIndex = 0;
您可以像上面的TextBox一样处理ListBox中的Enter
按钮并调用DoubleClick
事件。
答案 1 :(得分:2)
此问题类似于 - Pressing Enter Key will Add the Selected Item From ListBox to RichTextBox
某些控件在Control::KeyDown事件中按下时无法识别某些键。对于例如如果按下的键是 Enter 键,则列表框无法识别。
请参阅Control::KeyDown事件参考的备注部分。
解决问题的一种方法可能是为列表框控件的Control::PreviewKeyDown事件编写方法:
private void listBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up && this.listBox1.SelectedIndex - 1 > -1)
{
//listBox1.SelectedIndex--;
}
if (e.KeyCode == Keys.Down && this.listBox1.SelectedIndex + 1 < this.listBox1.Items.Count)
{
//listBox1.SelectedIndex++;
}
if (e.KeyCode == Keys.Enter)
{
//Do your task here :)
}
}
private void listBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Enter:
e.IsInputKey = true;
break;
}
}