c#列表框控件(箭头和输入键)

时间:2012-01-06 14:19:30

标签: c# listbox

我有一个显示数组内容的列表框。当按下“go”按钮时,数组会填充一个结果列表。

go按钮在表单属性上设置为AcceptButton,因此在表单焦点的任意位置按Enter键会重新运行go按钮进程。

双击列表框中数组的结果可以正常使用以下内容:

void ListBox1_DoubleClick(object sender, EventArgs e) {}

我希望能够使用我的箭头键并输入键来选择和运行事件,而无需双击列表框中的行。 (不过每次都会按下按钮运行)

基本打开表单,输入搜索字符串,按Enter键运行go按钮,使用向上和向下箭头然后按Enter键选择运行相同的事件,如上面的双击。需要在每一位之后改变焦点。

2 个答案:

答案 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;
    }
}