dポイントプレゼントキャンペーン実施中!

ふたつの温度計があって、室温が23度外気温が18度の場合、
シリアル通信によって2318としておくられてきます。
そしてこれがTextBox2に2318と表示されます。

Delegate Sub DataDelegate(ByVal sdata As String)
Private Sub PrintData(ByVal sdata As String)
TextBox2.Text = sdata
End Sub

ここまではなんとかうまくいきました。ここからが質問なんですが、
このsdataをTextBox3とTextBox4に23℃、18℃と分けて表示したいのですが
うまくいきません。substringを使って、

 sdata = sdata.Substring(0, 2)
 TextBox3.Text = sdata

などとやってみましたが
「インデックスおよび長さは文字列内の場所を参照しなければなりません。」
とエラーとなってうまくいきません。どう書いたらいいのかおしえてください。

尚、シリアル通信は改行コードを頭につけて、\r\n2318 と連続的に送られてくる
んですがこれが問題なんでしょうか。

A 回答 (2件)

>と二行あけて4プラスデータが縦に連続的に表示されます。



2行空けて が何なのか気になりますが。
最初の表示の分は何のかも。

sdata には、4文字しか入っていないようなので。

Private Sub PrintData(ByVal sdata As String)
  TextBox2.Text = sdata
  TextBox3.text =sdata.Substring(0, 2)
  TextBox4.text =sdata.Substring(2, 2)
End Sub

で取得できるはずですが。

又は、
Private Sub PrintData(ByVal sdata As String)
  TextBox2.Text = sdata
End Sub
で、TextBox2.Text には、2318 と入っているのなら

Private Sub PrintData(ByVal sdata As String)
  TextBox2.Text = sdata
  TextBox3.text =TextBox2.text.Substring(0, 2)
  TextBox4.text =TextBox2.text.Substring(2, 2)
End Sub

でも同じように取得できるはずです。

この回答への補足

色々ためしてみましたが残念ながらうまくいきませんでした。
「インデックスおよび長さは文字列内の場所を参照しなければなりません。」
とのエラーメッセージがでます。
試しに改行コードを抜いて数字だけを送ると、エラーにはなりませんが文字が全く
表示されなくなります。なんかむずかしいです。

補足日時:2010/11/29 19:33
    • good
    • 0

>尚、シリアル通信は改行コードを頭につけて、\r\n2318 と連続的に送られてくる


>んですがこれが問題なんでしょうか。

だったら、sdata に何がどのように入っているか調べてみたら。
Private Sub PrintData(ByVal sdata As String)
Debug.Print(sdata.Length.ToString())
If sdata.Length > 3 Then
For i As Integer = 0 To sdata.Length - 1
Debug.Print(sdata.Substring(i, 1))
Next
End If
End Sub

これで、イミディエイトウィンドウにはどのように表示されましたか?

この回答への補足

回答ありがとうございます。
早速ためしてみたところ
4
2
3
1
8


4
2
3
1
8
と二行あけて4プラスデータが縦に連続的に表示されます。

尚私はVBは全くの初心者でシリアル通信はwebサイトを検索して
シリアル通信プログラムを探し、かたっぱしから試してみたところ、たまたま
うまく動いたもので、プログラムの意味はさっぱり理解していません。
これをどう解釈したらいいんでしょうか。

補足日時:2010/11/27 12:44
    • good
    • 0

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