4

すべてのボタンで使用できるように、comboBox1 で選択した値のパブリック変数を作成して、ボタンごとに繰り返す必要がないようにするにはどうすればよいですか? 私が持っているすべてのボタンについて:

var portNum = comboBox1.SelectedItem.ToString();
using (SerialPort port = new SerialPort( portNum, 9600, Parity.None, 8))

しかし、すべてのボタンに var 宣言行を配置する必要はなく、portNum だけが必要です。

public partial class planar232 : Form
{
    private SerialPort comPort = new SerialPort();
    private string[] ports = SerialPort.GetPortNames();


    public planar232()
    {
        InitializeComponent();
        foreach (string port in ports)
        {
            comboBox1.Items.Add(port);
        }

    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        var portNum = comboBox1.SelectedItem.ToString();
        using (SerialPort port = new SerialPort( portNum, 9600, Parity.None, 8))
        {
            byte[] bytesToSend = new byte[9] { 0x38, 0x30, 0x31, 0x73, 0x21, 0x30, 0x30, 0x31, 0x0D };
            port.Open();
            port.Write(bytesToSend, 0, 9);
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        var portNum = comboBox1.SelectedItem.ToString();
        using (SerialPort port = new SerialPort( portNum, 9600, Parity.None, 8))
        {
            byte[] bytesToSend = new byte[9] { 0x38, 0x30, 0x31, 0x73, 0x21, 0x30, 0x30, 0x30, 0x0D };
            port.Open();
            port.Write(bytesToSend, 0, 9);
        }
    }
4

4 に答える 4

4

ComboBox に "COM1" などと表示されている場合は、次のようにします。

using (SerialPort port = new SerialPort(comboBox1.Text, 9600, Parity.None, 8))

または、使用する必要がある場合はSelectedItem

using (SerialPort port = new SerialPort(comboBox1.SelectedItem.ToString(), 9600, Parity.None, 8))

本当に物件が欲しいなら、

string SelectedPort { get { return comboBox1.SelectedItem.ToString(); } }

さらに良いのは、コードをリファクタリングして、ボタン ハンドラーでデータを指定するだけにすることです。

private void button1_Click(object sender, EventArgs e)
{
    byte[] bytesToSend = new byte[9] { 0x38, 0x30, 0x31, 0x73, 0x21, 0x30, 0x30, 0x31, 0x0D };
    this.Send(bytesToSend);
}

private void button2_Click(object sender, EventArgs e)
{
    byte[] bytesToSend = new byte[9] { 0x38, 0x30, 0x31, 0x73, 0x21, 0x30, 0x30, 0x30, 0x0D };
    this.Send(bytesToSend);
}

private void Send(byte[] bytesToSend)
{
    var portNum = comboBox1.SelectedItem.ToString();
    using (SerialPort port = new SerialPort( portNum, 9600, Parity.None, 8))
    {
        port.Open();
        port.Write(bytesToSend, 0, bytesToSend.Length);
    }
}
于 2012-12-18T18:15:52.623 に答える
2

フォーム スコープでプロパティを作成します。

public Form Form1
{
    public string PortNum {get;set;}

    public void ComboBox1_SelectionChanged(object sender, EventArgs e)
    {
       PortNum = ComboBox1.SelectedItem.ToString();
    }

    ... (rest of your code)

}
于 2012-12-18T18:15:55.263 に答える
0

設計時にボタン 1 と 2 を無効にします。

プライベート メンバー PortNum を追加します

SelectedItemChange イベント ハンドラーをコンボボックスに追加します。選択が null でない場合は、PortNum に保存してボタンを有効にします。

于 2012-12-18T18:20:25.653 に答える
0

プロパティを使用します:

// this is a class member
string PortNum 
{
    get { return comboBox1.SelectedItem.ToString(); }
}

// instead of your original code
using (var port = new SerialPort(PortNum, ...)) {
    ...
}
于 2012-12-18T18:16:52.983 に答える