for やdo whileなどをつかってtextbox1.textに配列を次々と代入するにはどうしたら
いいのでしょうか?また、他に簡単な方法がございましたらそちらの方でも
一向にかまいません。自分が考えたコードではないちいちテキストボックスに文字を代入するたびに変数を一つづつ打って入れていくやり方なのでかなり能率が悪いと思うのです。なにか能率のあがる書き方はないものでしょうか?
TextBox1.Text = mytel(0) & vbCrLf + mytel(1) & vbCrLf + mytel(2 )_ & vbCrLf + mytel(3) & vbCrLf + mytel(4) + vbCrLf + _ mytel(5) & vbCrLf + mytel(6) & vbCrLf + mytel(7) & vbCrLf _ + mytel(8) & vbCrLf + mytel(9)
いちいち変数を打たずに繰り返し処理によってテキストボックスに代入するする方法が知りたいのです。よろしくお願いします。
Dim i as long
For i=0 to 9
TextBox1.Text = TextBox1.Text + mytel(i) + vbCrLf
Next
とか。
ありがとう!見事解決しました!
TextBox1.Text = mytel(i) + vbCrLf
じゃだめだったんですねー!
感覚的には大丈夫のような気がしますが??
何でじゃろ???
>TextBox1.Text = mytel(i) + vbCrLf
元々 TextBox1.Text に設定されている文字列を
mytel(i) + vbCrLf で“上書き”するから。
変数に数値を足す時を考えればわかりやすい
最後に改行を入れるか入れないかが、かなりいいかげんになってませんか。
>他に簡単な方法がございましたらそちらの方でも
VB6なら、スピードと簡単さから言って、
Text1.Text = Join(mytel, vbCrLf)
と一行で書きます。
ねろさんご忠告ありがとうございます。
ですが、私のコードには配列の(i)
があります、好きなiの配列のみ取り出したいときはこのコードの時はどうしたらいいのでしょうか?
for i=0 to 9
select case i
case 1,2,3 '<-----好きな添字
text1.text=text1.text & mytel(i) & vbcrlf
end select
next
とか
>好きなiの配列のみ取り出したいときはこのコードの時はどうしたらいいのでしょうか?
好きなiの配列とは?
myte(1)とかmytel(5)というのは配列の要素と言いいます。
配列の要素を選択して取り出すということでしょうか?
かぶさん、ねろさん
<<<
配列の要素を選択して取り出すということでしょうか?
そうです。
そして、Joinコードを使ったやり方で出来たらやりたいです。
selectだと
奇数番号や偶数番号のの配列だけ取り出したいときなどに手入力はきついですから。
Joinコードで無駄がなく偶数番号の配列だけとりだしたり
奇数番号の配列だけとりだすことはできないものでしょうか?
えーと、0って偶数でしたっけ?
と言うことで奇数をやって見ます。
Const MaxD = 9
Dim mytel(0 To MaxD) As String
Dim i As Integer
'何か文字を入れる
For i = 0 To MaxD
mytel(i) = CStr(i)
Next
Dim temp(0 To MaxD \ 2) As String
For i = 0 To MaxD
If i Mod 2 <> 0 Then
temp(i \ 2) = mytel(i)
End If
Next
Text1.Text = Join(temp, vbCrLf)
ねろさん
返信ありがとうございます。
一応やってみましたが、
Dim temp(0 To MaxD \ 2) As String
の Toの上にエラーの~~の文字が
でます。
一応私はVB.NETなのですが、
配列宣言で下限を指定することができませんとでます。
これはどうしたら良いのでしょう?
ちなみに私のやり方が悪いのかもしれませんが、
確かに奇数個の文字列は表示されるのですが、
それが二回ならんで表示されます?
一回だけでいいのですが。どしたらよいのでしょうか?
>配列宣言で下限を指定することができませんとでます。
>これはどうしたら良いのでしょう?
[VB.NET]の場合、メニューより
[表示]-[その他のウィンドウ]-[タスク一覧]
で表示されるウィンドウにエラーメッセージが表示されます。
エラー表示を選択して[F1]キーを押すとエラーの説明と解決法
が載ってますので参考にして下さい。
配列は常に 0 の下限となります。上限のみ指定して下さい。
>一回だけでいいのですが。どしたらよいのでしょうか?
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200509/05090018.txt
で成功したみたい。
ちなみにねろさんの
>ねろ 2005/09/04(日) 19:29:21
のコードの動きをそのまま[VB.NET]でテスト
しましたが、
>確かに奇数個の文字列は表示されるのですが、
>それが二回ならんで表示されます?
のような現象は再現できませんでした。
強いてあげれば、TextBox の Multiline を
有効にしてないと改行コードが文字化けして
表示されるだろうと思うくらいです。
>一回だけでいいのですが。どしたらよいのでしょうか?
二回表示している部分があるなら一回にして下さい。
ああ!これはVB.NETだったんだ、そういえばTextBox1.Textになってますね。(^^;
特攻隊長まるるうさんフォロー有難うございます。
.NETなら System.Text.StringBuilderを使う手も有りそうです。
Dim MyStringBuilder As New System.Text.StringBuilder("")
For i As Integer = 0 To MaxD
If i Mod 2 <> 0 Then
MyStringBuilder.Append(mytel(i))
MyStringBuilder.Append(Environment.NewLine) 'VbCrLf
End If
Next
'最後の改行の削除
MyStringBuilder.Remove(MyStringBuilder.Length - Environment.NewLine.Length, Environment.NewLine.Length)
TextBox1.Text = MyStringBuilder.ToString
最後の改行削除のコードがなんとなくいやらしい、何かもっと良い方法が有りそうだが。。
ねろさん、そんなに長くなるのだったら最初の方が楽なような。。。。。
削除の部分は放置か、他に消す方法がありそうな。。。
>ねろさん、そんなに長くなるのだったら最初の方が楽なような。。。。。
うむむ! 確かに。。。。
ただし同じ機能で有ればコードは短い方が良いので有るが、そう簡単でもない。
細かい説明はStringBuilderクラスを調べていただきたいが、
たとえば「富士山」という文字を10,000個テキストボックスに入れるとしよう。
For n As Integer = 1 To 10000
TextBox1.Text += "富士山" + Environment.NewLine
Next
こうすると、私の開発環境では4分15秒かかった。
ところが
Dim MyStringBuilder As New System.Text.StringBuilder("")
For i As Integer = 1 To 10000
MyStringBuilder.Append("富士山")
MyStringBuilder.Append(Environment.NewLine) 'VbCrLf
Next
TextBox1.Text = MyStringBuilder.ToString
StringBuilderを使った方はなんと1秒以下である。
つまり長いテキストの足し算にとってStringBuildeは画期的なのです。
StringBuilderは覚えておいて損は無い。
Joinは全ての文字の連結は速いのですが、不規則な文字の足しこみは
面倒でしかも余分な配列も必要ですね。
ねろさん
長い間ありがとうございました〜
本題は解決済みだけど余談という事で。
>最後の改行削除のコードがなんとなくいやらしい、何かもっと良い方法が有りそうだが。。
System.Text.StringBuilder のヘルプを読んだだけなので外しているかも
しれないけど、Length プロパティの値を Environment.NewLine.Length 分
だけ引くのじゃダメでしょうか?
Length プロパティの説明の中に
>現在の長さ未満の長さを指定した場合は、このインスタンスが指定した長さまでに切り捨てられます。
>指定した長さが現在の長さを超える場合は、このインスタンスの文字列値の末尾に空白が埋め込まれます。
>指定した長さが現在の容量を超える場合は、 Capacity が指定した長さに設定されます。
とあったので単純に Length プロパティの値を再設定してやれば
いいよな気がするんですけど。
MyStringBuilder.Length = MyStringBuilder.Length - Environment.NewLine.Length
Geo=TK3さんどうも。
>MyStringBuilder.Length = MyStringBuilder.Length - Environment.NewLine.Length
なる程、これで良さそうですね、ちょっと気が付きませんでした。(^^
MyStringBuilder.Length -= Environment.NewLine.Length
こうするともっと短くなりますか。
じつは、
MyStringBuilder.Capacity = MyStringBuilder.Length - Environment.NewLine.Length
これはやってみたのですが、これは見事に嫌われました。
ツイート | ![]() |