いつもお世話になっております。
毎度非常に簡単だと思われる質問で非常に恐縮なのですがお願いします。
TextBoxに1行ずつ配列の中身を表示させたいと思い、以下のように書きました。
For i = 0 To 3
TextBox1.Text = "[ " & i & "," & A(i) & " ]" & vbCrLf
Next i
Aという配列は宣言してあり、TextBoxはMultiline = Trueです。
これで実行すると、[ 3,0 ]のみが表示されます。(配列の中身は0です)
[ 0,0 ]
[ 1,0 ]
[ 2,0 ]
[ 3,0 ]
と表示させるにはどうすればいいのでしょうか?
VB2005です。
ループする度にText1を上書きしてるから
For i = 0 To 3
TextBox1.Text = Text1.Text & "[ " & i & "," & A(i) & " ]" & vbCrLf
Next i
で、できます。
ループする度に文字を連結する
旅人Aさん、素早い回答ありがとうございます。
解決しました。「文字を連結」、勉強します。
ありがとうございました。
VB2005 の TextBox には、『AppendText メソッド』が用意されていますので、
そちらを利用してみてください。すなわち、
TextBox1.Clear()
For i As Integer = 0 To 3
TextBox1.AppendText(String.Format("[{0},{1}]", i, a(i)) & vbCrLf)
Next
または、
TextBox1.Clear()
For i As Integer = 0 To 3
TextBox1.AppendText("[" & CStr(i) & "," & a(i) & "]" & vbCrLf)
Next
といった感じになります。
Text プロパティに、毎回文字列連結させていく方法でも実現できますが、
その方法だと、ループの回数が多い場合に辛くなってきます。
実際、当方の環境では、3000回の単純なループ処理で試したときに、
AppendText 法だと 3秒、Text 連結で 150 秒という結果になりました。
Dim sw As New Stopwatch()
sw.Start() '時間測定開始
TextBox1.Clear()
For i As Integer = 1 To 3000
TextBox1.AppendText("[" & CStr(i) & "]" & vbCrLf)
'TextBox1.Text = TextBox1.Text & "[" & CStr(i) & "]" & vbCrLf
Next
sw.Stop()
MessageBox.Show(sw.Elapsed.ToString()) '処理時間を表示
また、もしも文字列連結法を使うのであれば、Text プロパティを毎回読み書きするのではなく、
StringBuilder クラスを利用するようにします。これなら、3000 回でも 0.1 秒未満で処理できます。
Dim sw As New Stopwatch()
sw.Start()
Dim S As New System.Text.StringBuilder()
For i As Integer = 0 To 3000
S.AppendLine("[" & CStr(i) & "]")
Next
TextBox1.Text = S.ToString()
sw.Stop()
MessageBox.Show(sw.Elapsed.ToString())
>> 旅人Aさん
そもそも、TextBox1 に Text1 の内容を繋げてはマズイかと…。(^^;
ちなみに、(今回は関係ありませんが)VB6 の場合は、AppendText が無いので
Dim i As Integer
Text1.Text = ""
For i = 0 To 3
Text1.SelText = "[" & CStr(i) & "," & a(i) & "]" & vbCrLf
Text1.SelStart = Len(Text1.Text)
Next
のように「SelText プロパティ」を使う方法があります。
魔界の仮面弁士さん、回答ありがとうございます。
確かに例文では 0 to 3 と書いたのですが、
実際には255回ループさせていますので、少し時間がかかりました。
AppendText メソッドを利用してやってみます。
ありがとうございました。
魔界の仮面弁士さん ありがとうございます。
書くときに間違えてしまいますた。
ツイート | ![]() |