ページ 11

visual basicのループ文

Posted: 2016年3月30日(水) 12:42
by sakana
Lavelのループの質問をさせていただきます。
以下にプログラムの一部抜粋を記載いたします。

コード:

Private Sub LabelReset() 
Label7.ResetText()
Label8.ResetText()
Label9.ResetText()
Label10.ResetText()
Label11.ResetText()
Label12.ResetText()
Label13.ResetText()
End Sub
この文をfor文でまとめたいのですが、いろいろと試したのですがうまく機能しません。
環境はVusual Stdio Express 2015 for Windows Desktopです。

Re: visual basicのループ文

Posted: 2016年3月30日(水) 13:25
by みけCAT
sakana さんが書きました:Lavelのループの質問をさせていただきます。
Lavelとは何ですか?Labelのtypoですか?
sakana さんが書きました:この文をfor文でまとめたいのですが、いろいろと試したのですがうまく機能しません。
意味がわかりません。
  • 何をしたくて
  • どうなってほしいのに
  • 実際はどうなってしまう
のかを具体的に書いてください。

Re: visual basicのループ文

Posted: 2016年3月30日(水) 16:39
by sakana
わかりづらくて申し訳ありません。

Lavelとは何ですか?Labelのtypoですか?
Labelのスペルミスです。

・何をしたくて

コード:

For i As Integer = 7 To 13
Controls("Label" & i).Text = ""
Next
みたいにfor文を使って小さくまとめたいです。

Re: visual basicのループ文

Posted: 2016年3月30日(水) 21:40
by YuO
  • コントロールを配列化しておく
    ループをしたいのだから,配列やリストにしてしまえば普通にループが使えます。

    コード:

    Private _labels As Label()
    のようなフィールドを用意し,
    コンストラクタでInitializeComponentが呼び出された後に,

    コード:

    _labels = New Label () { Label7, Label8, Label9, Label10, Label11, Label12, Label13 }
    のようにして代入する。利用するときには

    コード:

    For Each l In _labels
        l.ResetText()
    Next
    のようにループさせる
  • Control.Controlsコレクションを使う
    ControlにあるControlsコレクションは,全ての子Controlが含まれ,ControlのNameで探すことができます。

    コード:

    For i = 7 To 13
        DirectCast(Controls($"Label{i}"), Label).ResetText()
    Next
    のようにループさせる。Form直下(正確には同一コントロール直下)にある場合のみ有効
型安全の関係上,前者を推奨します。

Re: visual basicのループ文

Posted: 2016年3月31日(木) 16:12
by sakana
返信ありがとうございます。
解決いたしました