DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Serialportはコントロール配列不可?

環境/言語:[VB2005]
分類:[.NET]

System.Io.Serialportをコントロール配列にするのは無理でしょうか?
webでよくあるやり方だとformsメンバじゃないから
Addできないし、AddressOfでイベント登録もできません。
(コンパイラにおこられます)

ポート数分をベタに書くしか何でしょうか?
■No23024に返信(Strさんの記事)
> System.Io.Serialportをコントロール配列にするのは無理でしょうか?

  ここのTipsにありますが・・・
  ttp://dobon.net/vb/dotnet/control/buttonarray.html

  もっとよく探しましょう!

以上。
返信ありがとうございます。

>   ここのTipsにありますが・・・
>   ttp://dobon.net/vb/dotnet/control/buttonarray.html

ここも見てやってみたんですが

Private testCom() As Ports.SerialPort

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'シリアルコントロール配列の作成(ここでは5つ作成)
Me.testCom = New Ports.SerialPort(4) {}

'シリアルコントロールのインスタンス作成し、プロパティを設定する
Me.SuspendLayout()
Dim i As Integer
For i = 0 To Me.testCom.Length - 1
'インスタンス作成
Me.testCom(i) = New Ports.SerialPort
'プロパティ設定
Me.testCom(i).PortName = "COM" & i.ToString
Me.testCom(i).BaudRate = 38400
Me.testCom(i).DataBits = 8
Me.testCom(i).StopBits = 1

'イベントハンドラに関連付け
AddHandler Me.testCom(i).DataReceived, AddressOf Me.testCom_DataReceived
Next i

'フォームにコントロールを追加
★コンパイルエラー Me.Controls.AddRange(Me.testCom) 'エラー:Forms.Controlから派生していない
★これでもエラー Me.Controls.Add(Me.testCom) 'エラー:Forms.Controlに変換できない
Me.ResumeLayout(False)

となって、フォームに追加できないんです。
それともここから何か変換?する方法があるのでしょうか?
■No23036に返信(Strさんの記事)
> となって、フォームに追加できないんです。
その部分の処理は記述せずとも構いません。

SerialPort クラスは、Control ではなく、Component を
継承しています(Timer クラスなどもそうですね)。
コントロールではないので、Controls.Add する事はできませんし、
する必要もありません。インスタンス化しただけで利用できるかと。


なお、手動で SerialPort を貼った際には、Form1.Designer.vb にて
Container インスタンスに登録されるようになっています。この作業は
必須というわけでは無いですが、Dispose 処理する際に便利なので、
 testCom(i) = New SerialPort(コンテナ)
あるいは
 testCom(i) = New SerialPort()
 コンテナ.Add(testCom(i))
のようにして登録しておき、それが終了時に コンテナ.Dispose() で
破棄されるように実装しておくと、都合が良いかと思います。
ご教示頂いた方法で配列化にすることができました。
(フォーム追加不要なのが「感覚的」に気持ち悪いですが・・・)

受信イベントも登録して動作が確認できました。
→どのポートかは「PortName」で判断

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板