C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 配列インデクスとラベル名で処理


(過去ログ 108 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■64325 / inTopicNo.1)  配列インデクスとラベル名で処理
  
□投稿者/ MP枯渇ウィザード (1回)-(2012/11/26(Mon) 15:09:50)

分類:[VB.NET/VB2005 以降] 

2012/11/26(Mon) 15:12:04 編集(投稿者)

どうも。

配列に格納されたデータの処理で、配列の中身をラベルとテキストボックスに表示しようとしています。
配列インデクスを使ってラベルとテキストボックスを連続処理をしたいと考えています。

イメージとしては、

Dim X() As String = {"A", "B", "C", "D"}

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'For a As Integer = 0 To 3
' Label[a+1].Text = X(a)
' Label[a+1].Text = X(a)
'Next
End Sub
End Class

みたいなことがしたいんですが・・・記述方法が浮かびません。
こういうことできますか?
引用返信 編集キー/
■64327 / inTopicNo.2)  Re[1]: 配列インデクスとラベル名で処理
□投稿者/ ズッカ (2回)-(2012/11/26(Mon) 16:04:56)
No64325 (MP枯渇ウィザード さん) に返信

簡単な例ですが、以下のような方法はどうでしょうか。
(いずれの方法も、Label1, Label2, Label3, Label4が存在していることを前提とします。)

その1)コントロール配列を使う
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim lbl() As New Label(){Label1, Label2, Label3, Label4} 

    For a As Integer = 0 To 3
        lbl(a).Text = X(a)
   Next
End Sub

その2)コントロールの名前を使う
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    For a As Integer = 0 To 3
        DirectCast(Me.Controls("Label" & (a + 1).ToString()), Label).Text = X(a)
        '上記はLabel1〜4がMe(自フォーム)上に直接配置されている場合の例。
        'もし、Label1〜4が他のコンテナ(PanelやGroupBox)上に配置されている場合は、Meの代わりにコンテナのコントロールを書けばよい。
   Next
End Sub

引用返信 編集キー/
■64329 / inTopicNo.3)  Re[1]: 配列インデクスとラベル名で処理
□投稿者/ shu (99回)-(2012/11/26(Mon) 17:20:22)
No64325 (MP枯渇ウィザード さん) に返信

ズッカさんとほとんど同じですが

Private Labels() as Label
Private X() As String = {"A", "B", "C", "D"}

ロードイベントまたはNewで
Labels = new Label(){Label1, Label2, Label3, Label4}

Private Sub Button1_Click(〜
    For idx = 0 To 3
        Labels(idx).Text = X(a)
   Next
End Sub

2010以降であれば
Labels = {Label1, Label2, Label3, Label4}
も可能

引用返信 編集キー/
■64333 / inTopicNo.4)  Re[2]: 配列インデクスとラベル名で処理
□投稿者/ shu (100回)-(2012/11/27(Tue) 09:58:19)
No64325 (MP枯渇ウィザード さん) に返信
No64327 (ズッカ さん) に返信

> その2)コントロールの名前を使う
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
> For a As Integer = 0 To 3
> DirectCast(Me.Controls("Label" & (a + 1).ToString()), Label).Text = X(a)
> '上記はLabel1〜4がMe(自フォーム)上に直接配置されている場合の例。
> 'もし、Label1〜4が他のコンテナ(PanelやGroupBox)上に配置されている場合は、Meの代わりにコンテナのコントロールを書けばよい。
>   Next
> End Sub
>

Me.Controls(コントロール名)だとPanelなどのコンテナコントロール内のコントロールが取得出来ないので
Me.Controls.Find(コントロール名,True)を使用する必要があるかもしれません。
引用返信 編集キー/
■64379 / inTopicNo.5)  Re[2]: 配列インデクスとラベル名で処理
□投稿者/ MP枯渇ウィザード (2回)-(2012/11/30(Fri) 10:26:01)
どうも。
ズッカ様、shu様、ありがとうございます。
おかげで塩梅良く行きました。


Private Labels() As Label
Private Boxes() As TextBox

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Labels = New Label() {Label1, Label2, Label3, Label4}
        'Labels = {Label1, Label2, Label3, Label4}
        Boxes = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}
        'Boxes = {TextBox1, TextBox2, TextBox3, TextBox4}
        For idx = 0 To 3
            Labels(idx).Text = X(idx)
            Boxes(idx).Text = idx.ToString + " " + Labels(idx).Text
            Boxes(idx).TextAlign = HorizontalAlignment.Center
            Boxes(idx).ReadOnly = True
        Next

    End Sub

プログラミング面白いです。またお願いします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -