0

インターネットで記事を読んでいますが、ここに何かが欠けていると思います。この 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
        }
    }
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 に答える