【C#】シリアル通信 COM 一覧取得

スポンサーリンク

仕事で久々にシリアル通信(Serial)しなきゃいけなくなり、ただ『COMが分からんッッ』ってなったわけ。。。
『【COMの一覧を取得して、選択できる仕組み】を作りたいな!』って思いたったわけ。
今回は、【コンボボックスにCOMの一覧を登録して、選択できるようにする】を目標にサンプルを作っていきたいと思います。

操作画面(UserInterface)はこんな感じに

今回は目的に忠実に他の要素は入れずに行きたいと思います。

frmMain      ・・・フォームのコントロール名
cmbComList    ・・・Comの一覧を入れるコンボボックス名
btnUpdateComList ・・・Comの一覧を再取得するボタン名

コンボボックスにCOMの一覧を登録する

COMの一覧を取得する

まずは、NameSpaceを明示する。

using System.IO.Ports;

[ SerialPort ]というクラスの中の関数[ GetPortNames() ]を使用する。

//COM名を取得する
string[] comNames = SerialPort.GetPortNames();

COMの名前の一覧を取得できました。

コンボボックスに登録する

ここは、コンボボックスの簡単な使い方になるので、あっさり目にいきます。

コンボボックスの選択肢(Item)を初期化

【 <ComboBox名>.Items.Clear() 】で初期化する事が可能です。

cmbComList.Items.Clear();

コンボボックスの選択肢(Item)の登録

今回は、stringの配列で取得出来ているので、AddRange()で1行で処理します。
【 <ComboBox名>.Items.AddRange( string[] ) 】で配列を一括で登録可能です。

cmbComList.Items.AddRange(comNames);

コンボボックスにCOMの一覧を登録する関数を作成する

[ COMの取得 ] から [ コンボボックスの登録の方法 ] も分かったので、これを一連の流れにした関数を作りたいと思います。

private void UpdateListCom()
{
    //コンボボックスを初期化
    cmbComList.Items.Clear();   
            
    //COM名を取得する
    string[] comNames = SerialPort.GetPortNames();

    //コンボボックスに登録する
    cmbComList.Items.AddRange(comNames);

    //選択肢が有れば、デフォルトで一番上を
    if(0 < comNames.Length) 
    {
        cmbComList.SelectedIndex = 0;
    }
}

各イベントに処理を実施

関数もできたので、起動時に関数を起動させましょう。
そして、設置したボタンのクリックイベントにも関数を呼びましょう。

private void FrmMain_Load(object sender, EventArgs e)
{
    UpdateListCom();
}

private void BtnUpdateComList_Click(object sender, EventArgs e)
{
    UpdateListCom();
}

実行結果としては、下記の通り。

まとめ

今回は、シリアル通信をする時に必要なインターフェースである『COMを取得する方法』をやってみました。

他のソフトでシリアル通信をした場合、取得できるCOM名が減るのか期待してチェックしてみましたが、残念ながら減る事はありませんでした
その為、パソコン上にあるCOM名を取得するだけのようです。
【接続可能なCOM名の取得】が出来ればよかったのにと思っています。

今回の目的である『コンボボックスでシリアル通信のCOM名を選択できる』アプリケーションが出来ました。

コメント

タイトルとURLをコピーしました