仕事で久々にシリアル通信(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名を選択できる』アプリケーションが出来ました。
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント