1

VB 2008(Express)でボタンの配列のプロパティを制御することを検討しています。私はMSのホワイトペーパーのサンプルコードを見てきましたが、VB6で行われたものと比べると、頭が回転します。(はい、私はアマチュアなので、コーディングの質の悪さや、ここでの経験者にとっておそらく簡単な質問は何ですか...)

私が正しく読んでいる場合、今それを行う正しい方法は、別のクラスを作成し、そのクラスのコンストラクターなどを作成してから、プロジェクトでインスタンス化することです。

私はこのような比較的単純な配列を使おうとしています:

    'Create buttons
    'Dim btn(30) As Button
    'For i As Integer = 0 To 29
    '    btn(i) = New Button()
    '    btn(i).Width = 100
    '    btn(i).Height = 30
    '    btn(i).Text = i + 1

    '    btn(0).Left = 120
    '    btn(0).Top = 100

    '    If i >= 1 And i <= 14 Then
    '        btn(i).Left = 120
    '        btn(i).Top = btn(0).Top + (i * 30)
    '    End If

    '    If i = 15 Then
    '        btn(15).Left = 235
    '        btn(15).Top = 100
    '    End If

    '    If i >= 16 And i <= 29 Then
    '        btn(i).Left = 235
    '        btn(i).Top = btn(0).Top + ((i Mod 15) * 30)
    '    End If
    '    Me.Controls.Add(btn(i))

    'Next

これをloadメソッドに入れると、別のボタンからアクセスできなくなります。これは、このスニペットがloadサブルーチンにある場合、プライベートサブルーチンにあると思うためです。フォーム内の他の関数からbtn(i)配列にアクセスできるように、このコードを作成する簡単な方法はありますか?

4

1 に答える 1

1

ボタン配列を、loadメソッドではなく、クラスのフィールドまたはプロパティにする必要があります。

最も簡単な方法は、Dim btn(30) As Button宣言をloadメソッドからクラスに移動する(loadメソッドの上の行に貼り付ける)だけで完了です。

コーディング標準などについて議論する人もいるかもしれませんが、それでうまくいくと思います(-:

さて、上記とあなたのコメントに加えて、私が説明しようとしていたことを説明するのにちょうど十分なコード。このコードはコンパイルされて実行されます-フォームクラス内の2つのメソッドからアクセス可能なボタン配列:

Public Class Form1

    Dim btn(30) As Button

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For i As Integer = 0 To 29
            btn(i) = New Button
        Next
    End Sub

    Private Sub DoSomethingElse()
        For i As Integer = 0 To 29
            btn(i).Text = String.Format("{0}", i + 1)
        Next
    End Sub

End Class
于 2010-02-21T12:04:46.350 に答える