複数Subから使用する配列変数の大きさを可変にするには?
Win-XP上のVB2005です。
通常,配列変数は Dim A(100) As Integer のように要素数を固定して指定します。しかし,例えば
①宣言部分でPublic n As integerを定義する。
②FormのLoadイベントSubで,あるファィルを読み込んでそのデータ数nを調べる。
③FormのLoadイベントSub又は別のイベントのSub内で,このnを使ってDim A(n) As Integerを定義する。
としてやれば,A(n)を正常に使用できます。
しかし,このA(n)を複数のイベントSubから使用したい場合に Dimではなく宣言部分でPublic A(n) As Integrと定義してやると,定義部分ではエラーにはならないのですが,実際にSub内で代入をしようとするところで,エラーになります。
固定の定義 Public A(100) As Integerではもちろんどこでもエラーになりません。
この目的を達成させる方法を御教示下さい。
>通常,配列変数は Dim A(100) As Integer のように
Dim strA() As String のように要素数を固定しない方法も日常使っています。
>複数Subから使用する配列変数の大きさを可変にするには?
ではなくて「配列の大きさを変更するには」ですよね。
で、質問の中には配列の大きさを変更しているコードは無いのですが。
エラーが出るのは配列の大きさを指定しないで値を代入しているのではないのかな。
どんなエラーが出ますか?
配列の大きさを変更するのはReDim ステートメントです。
元の配列の値を保持するにはReDim Preserve ステートメントです。
ただし.NETの場合基本的に配列の大きさは固定で、ReDim Preserveは
新しい配列を用意して要素をコピーするだけで、頻繁に配列のサイズを
変更する場合はListクラスを使いましょう。
それと同じクラスの中で使用するのなら、アクセス修飾子をPublicにする必要は無く
Privateで良いです。
カッツ様,我龍院さま御指導ありがとうございました。
要素数を固定しない方法,ReDim,ReDim Preseveいずれも未経験でした。
これから試して見ます。
ありがとうございました。
私の質問の仕方が不適切だったと思います。要素数を固定しない配列定義と,ReDim Preserveは下記のようにうまく動作しました。
しかし,例えばFormにボタンを2つ置いて
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim A() As Integer = {1, 2, 3}
ReDim Preserve A(5)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
A(1) = 1
End Sub
End Class
とすると,Button2のSubのA(1) = 1と代入するところでエラーになります。Aという配列をButton1のSubでもButton2のSubでも両方で使えるようにするにはどうすればいいかという質問です。よろしくお願いします。
・Form1クラスの宣言部で、配列Aを宣言する。
例 Private A() As Integer
・コンストラクタまたはLoadイベント等で、配列AをRedimする。
これでボタンイベント等でA配列を使えるのでは?
たみとき様,うまくいきました。何と素晴らしいことか!
これまでReDimを使ったことがありませんでした。皆さんありがとうございました。
Public Class Form1
Private A() As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ReDim A(5)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
A(1) = 123
MsgBox(A(1))
End Sub
End Class
ツイート | ![]() |