如何捕获ListBox控件中的Enter键?

时间:2013-11-03 06:29:25

标签: c# .net

我通过互联网阅读文章,但我想我在这里遗漏了一些东西。我尝试按照 this SO question 的回答,但没有发生任何事情。

每当我按下Enter / Return键时,我都想触发usePort_Click方法。另外,每当我尝试从ports_Keydown方法调用它时,我不知道如何绕过usePort_Click的EventArgs参数。

注意:端口是一个ListBox控件。

    private void usePort_Click(object sender, EventArgs e)
    {
        try
        {
            port = new SerialPort((string)ports.SelectedItem, 9600);
            portUsedLabel.Text = (string)ports.SelectedItem;

            String buffer = "";
            String tellArduino = "food";    // test value

            port.Open();
            port.WriteLine(tellArduino);

            for (int x = 0; x < tellArduino.Length; x++)
            {
                buffer += port.ReadLine();
            }

            ports.Items.Add(buffer);
            port.Close();
        }
        catch { //stuff }
    }

    private void ports_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            //code here
        }
    }

1 个答案:

答案 0 :(得分:0)

一个好的解决方案是将要执行的代码移动到一个单独的方法中(我称之为someStuff,用更好的名称替换名称)并从两个事件处理程序中调用该方法:

private void usePort_Click(object sender, EventArgs e)
{
    someStuff();
}

private void ports_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        someStuff();
    }
}

private void someStuff()
{
    try
    {
        port = new SerialPort((string)ports.SelectedItem, 9600);
        portUsedLabel.Text = (string)ports.SelectedItem;

        String buffer = "";
        String tellArduino = "food";    // test value

        port.Open();
        port.WriteLine(tellArduino);

        for (int x = 0; x < tellArduino.Length; x++)
        {
            buffer += port.ReadLine();
        }

        ports.Items.Add(buffer);
        port.Close();
    }
    catch { //stuff }
}