投稿者 YUU  (社会人) 投稿日時 2015/8/5 20:37:16
現在、シリアル通信処理を制御するプログラムを作成しております。

行いたい処理は下記の通りです。

①SerialPortコントロールを利用し受信イベントにてデータをキャッチ。

②データをリッチテキストボックスにて出力。(バイナリデータとテキスト文字列)

③変換されたテキストを項目別(空白毎に区切る)にリストビュー表示

↑を繰り返すアプリケーションを作成しております。

現在②の途中まで作成できたのですが行き詰ってしまい困っております。

リッチテキストボックスを2箇所設置。片方をバイナリデータ、もう片方を変換されたテキストデータ。

バイナリデータの出力は容易に行えたのですがテキストにて変換された文字列をうまく出力できません。

    Delegate Sub dlgReceive(ByVal Data As Byte)

    Private Sub SerialPort_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort.DataReceived

        'シリアルポートをオープンしていない場合、処理を行わない
        If SerialPort.IsOpen = False Then
            Return
        End If

        Try
            Dim RxLen As Integer = SerialPort.BytesToRead  '受信バイト数取得
            Dim InData(RxLen - 1) As Byte                  '受信値読み込み配列

            SerialPort.Read(InData, 0, RxLen)              '読み込み

            '1バイトずつメインスレッドにてテキストボックス書込み
            For i As Integer = 0 To InData.Length - 1
                Me.Invoke(New dlgReceive(AddressOf RcvDataToTextBox), InData(i))
            Next

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Sub RcvDataToTextBox(ByVal Data As Byte)

        If IsNothing(Data) = True Then
            Return
        End If

        'バイナリ表記
        Dim strBinary As String
        strBinary = Convert.ToString(Data, 16).ToUpper()  'HEX変換・大文字
        strBinary = strBinary.PadLeft(2, "0"c)            '1文字の場合0を付加

        Try
            Me.txtbox1.AppendText(strBinary & " ")
            Me.txtbox1.SelectionStart = Me.txtbox1.Text.Length
            Me.txtbox1.ScrollToCaret()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub