0

我在互联网上阅读了文章,但我认为我在这里遗漏了一些东西。我试着按照这个 SO question的答案的答案,但什么也没发生。

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

注意:ports是一个 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
        }
    }
4

1 回答 1

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 }
}
于 2013-11-03T06:36:06.047 回答