3

私はシリアルポートのプロジェクトをやっています..

コンボ ボックスから使用可能な COM ポートを選択する必要があります。

しかし、私はそれを得ることができません..そして、私はいくつかの助けが必要でした〜

これが私のコードです..そのC#です:

btn_Open はシリアルポートを有効にするボタンです

    private void btnOpen_Click(object sender, EventArgs e)
    {
        string [] myPort;

        int COM1 = cbCommPorts.SelectedIndex;
        int COM2 = cbCommPorts.SelectedIndex;
        int COM3 = cbCommPorts.SelectedIndex;
        Object selectedItem = serialPort1.PortName;

        myPort = System.IO.Ports.SerialPort.GetPortNames();
        cbCommPorts.Items.AddRange(myPort);

        serialPort1.PortName = cbCommPorts.SelectedItem.ToString();
        serialPort1.BaudRate = 115200;

        if (serialPort1.IsOpen) {
            serialPort1.PortName = cbCommPorts.SelectedItem.ToString();

            serialPort1.Open();
            btnTransmit.Enabled = true;
            btn2.Enabled = true;
            btn3.Enabled = true;
        }
  1. cbCommPorts はコンボ ボックスの名前です

    private void cbCommPorts_SelectedIndexChanged (オブジェクト送信者、EventArgs e) { int COM1 = cbCommPorts.SelectedIndex; int COM2 = cbCommPorts.SelectedIndex; int COM3 = cbCommPorts.SelectedIndex; オブジェクト selectedItem = serialPort1.PortName;

        MessageBox.Show("COM PORT: " + selectedItem.ToString() + " Selected");
    }
    

コードに問題はありますか? ありがとう..

4

3 に答える 3

6

Windows フォームで使用する方法の 1 つを次に示します。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Load += Form1_Load;
    }

    void Form1_Load(object sender, EventArgs e)
    {
        var ports = SerialPort.GetPortNames();
        cmbSerialPorts.DataSource = ports;
    }

    private void btnOk_Click(object sender, EventArgs e)
    {
        if (cmbSerialPorts.SelectedIndex > -1)
        {
            MessageBox.Show(String.Format("You selected port '{0}'", cmbSerialPorts.SelectedItem));
            Connect(cmbSerialPorts.SelectedItem.ToString());
        }
        else
        {
            MessageBox.Show("Please select a port first");
        }
    }

    private void Connect(string portName)
    {
        var port = new SerialPort(portName);
        if (!port.IsOpen)
        {
            port.BaudRate = 19200;
            port.Open();
            //Continue here....
        }
    }
}

そうは言っても、レガシー ソフトウェアを維持している場合を除き、WPF を検討することをお勧めします。WinForms の代わりに WPF を使用する方法を学ぶと、Windows 8、Windows Phone などでの開発の準備が整います。また、データバインディング機能により、実行しようとしていることが非常に簡単になります。

于 2012-12-10T03:14:29.347 に答える
0

WPF コード スタイル

public void comboBox_DropDownOpened(object sender, EventArgs e)
    {   
        string[] ports = SerialPort.GetPortNames();          
        foreach ( string comport in ports)
            {
                comboBox.Items.Add(comport);
            }
    }
.... /*Two control item combobox&button, comboxbox's item is COM port and   It's first argument of Function 「System.IO.Ports.SerialPort 」. Using (comboBox.text) */
private void button1_Click(object sender, RoutedEventArgs e)
    {

        System.IO.Ports.SerialPort Port = new SerialPort
            ((comboBox.Text), 115200, Parity.None, 8, StopBits.One);
        try
        {
            Port.Open();
            Port.Write(cmdByteArray, 0, cmdByteArray.Length );
        }
        catch { Exception ex; }
        Port.Read(readbyte, 0, readbyte.Length);
于 2016-06-16T09:40:32.320 に答える
0
private void comboBox_DropDownOpened(object sender, EventArgs e)
{
    string[] ports = SerialPort.GetPortNames();
    comboBox.Items.Clear();
    foreach (string comport in ports)
    {
        comboBox.Items.Add(comport);
    }
}

ysjia投稿への追加。

.Clear(); を追加しない場合 クリックするたびに、さらに拡大します。重複があります。

于 2016-12-07T11:22:42.267 に答える