• ベストアンサー

VBのコントロール配列を二次元配列にする方法

タイトル通りです。 テキストボックスなどをコントロール配列で持つときに二次元配列で持つ方法はないでしょうか? ご回答の方、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • haporun
  • ベストアンサー率40% (230/562)
回答No.3

コントロールのIndexプロパティを利用する方法では二次元配列はできません。 しかし、変数としての二次元配列ならできます。 Dim TextBoxes(3, 10) As TextBox などとすると、テキストボックスの多次元配列ができます。 ただし、この変数にはインスタンスがないので、インスタンスは別に作成してやる必要があります。 以下に例を示します。 名前がTexts、Indexが0のTextBoxを配置します。 フォームモジュールに以下を貼り付けます。 Option Explicit Private TextBoxes(3, 10) As TextBox Private Sub Form_Load() On Error Resume Next Dim N As Long, M As Long, T As Long For N = 0 To 2 For M = 0 To 9 T = N * 10 + M Load Texts(T) 'Load Texts(0)はエラーだが無視される Set TextBoxes(N, M) = Texts(T) TextBoxes(N, M).Left = N * 1320 TextBoxes(N, M).Top = M * 300 TextBoxes(N, M).Visible = True Next M Next N End Sub Private Sub Texts_Click(Index As Integer) MsgBox "これは(" & (Index \ 10) & ", " & (Index Mod 10) & ")です" End Sub この方法を使う場合、TextBoxes(N, M)のIndexプロパティはN * 10 + Mを示すので、注意が必要です。

Mizyu
質問者

お礼

ありがとうございます。これが知りたかったのです。 Dimで宣言すれば二次元配列にできそうだ、ということには気づいていたのですが。 インスタンスの生成が足りなかったのですね。ありがとうございました。

その他の回答 (2)

  • gould09
  • ベストアンサー率33% (196/589)
回答No.2

Mizyuさん、こんにちは。 コントロールを二次元配列にする方法は知りません。 ただ、二次元配列を添え字につかったらにた処理が出来ると思います。 dim iArry(10,10) as integer iArry(1,1)=1 iArry(2,1)=2 ... TEXT(iArry(1,1)).TEXT = "AAAAA" TEXT(iArry(2,1)).TEXT = "BBBBB"

回答No.1

Mizyuさん、こんにちは。 コントロール配列を二次元にする方法はありません!かな? 調べ切っていないのかも知れませんが、僕は知りません。 仮想二次元にして、その都度計算されたらいかがでしょうか。 例えば 5×8 の二次元とします。 DIM TBL(40) as string for i=1 to 5 for j=1 to 8 TBL((i-1)*8 + j)="テスト" next j next i

関連するQ&A

専門家に質問してみよう