アプリ版:「スタンプのみでお礼する」機能のリリースについて

VisualBasicのシリアルポートメソッドを使い、RS232-C通信を試そうとしている初心者です。

現在、別のPCからTeratermより文字を送り、自分のPCで受信結果を得ようとしているのですが
別PCから単発で文字を送っても、自分のPCでは反応せず
キーボードを押しっぱなしにすると、自分のPCのウィンドウに受信結果が表示されます。

一体、何が原因なのでしょうか?
さっぱり、わからず途方に暮れています。
下記にソースコードを記載しますので、詳しい方は教えて下さると幸いです。

------------------------------------------------------------------------
Public Delegate Sub MyDelegate(ByVal intData As Integer)

Private Sub AddData(ByVal str As String)
TextBox1.Text = str
End Sub

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim dlgByte As MyDelegate = New MyDelegate(AddressOf AddData)
Dim ByteRead(SerialPort1.BytesToRead - 1) As Byte
SerialPort1.Read(ByteRead, 0, SerialPort1.BytesToRead)
For i As Integer = 0 To ByteRead.Length - 1
   Me.Invoke(dlgByte, ByteRead(0))
Next
End Sub
------------------------------------------------------------------------

A 回答 (2件)

> TextBox1.Text = str



TextBox1.Text = TextBox1.Text + str
にしないと下のInvokeで常に一文字分で上書きされます。
複数バイトを受信していても、見た目には「常に最後の一文字だけが表示されている」ようにしか見えないでしょう。

> Private Sub SerialPort1_DataReceived(以下略)

このメソッドはシリアルポートのイベントとして正しく登録されていますか?

> Me.Invoke(dlgByte, ByteRead(0))

引数はByteRead(i)でないとせっかく読んだデータの先頭しか渡りません。

あとAddDataの引数型がStringでデリゲートの引数型がIntegerで実際に渡している引数の型がByteという不整合っぷりが問題になっている可能性があります。
デリゲートの引数型をStringにして、Invokeで渡す引数をToString()でString変換してから渡す方が確実そうな……
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
初心者なものでわからないもので
>> Private Sub SerialPort1_DataReceived(以下略)
> このメソッドはシリアルポートのイベントとして正しく登録されていますか?
は前に宣言等が必要ということでしょうか?

お礼日時:2011/03/17 19:07

SerialPort1がデザイナで配置したSerialPortなら、そのプロパティを見てイベントのDataReceivedのところにその関数名があればOKです。


デザイナで配置した物でないならもちろん「イベントに登録する」というコードを書く必要があります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!