コントロール配列を2次元配列にするには?

解決


なお  2007-04-26 05:05:03  No: 136233

VB6で開発をしているのですが、
コマンドボタンなどを大量に使用するため、コントロール配列が1次元であると、変数の計算がややこしいため、
2次元配列のコントロールは入れるにできないでしょうか?
今は、擬似的に2次元にしているのですが、配列変数の1次側(?)を自由に増やしたいです。

例)
command01(i).value=Ture
command02(i).value=Ture
command03(i).value=Ture
command04(i).value=Ture
command05(i).value=Ture
の01や02の数字の部分を変数に置き換えたいのですが、やり方がわかりません。
イメージ的にはこんな感じです。

For t=1 To 5
  For i=1 To 5 
    command(t)(i).value=Ture
  Next i
Next t


魔界の仮面弁士  2007-04-26 06:46:24  No: 136234

2次元配列に見せかけるために、

Function GetButton( ByVal row As Integer, ByVal col As Integer) As CommandButton

などの関数を自作してやれば良いかと。


なお  2007-05-02 22:51:56  No: 136235

魔界の仮面弁士さん
かきこありがとうございます。

Functionの使い方を探したのですが、使っている本にも書き方が乗っていないので、具体的な構文がわかりません。

詳しく教えていただけないでしょうか?


アクア  URL  2007-05-03 01:15:14  No: 136236

アクアと申します。宜しくお願いいたします。
明確な回答ではありませんが、ご容赦ください。

概ね初心者用の入門書であればSubプロシージャとFunctionプロシージャはセットで解説にあります。
Functionプロシージャは基本の部類に属してますので、もし載っていないのならば、もっと初心者用の書籍がいるかと思います。

Web サイトなら
ttp://homepage1.nifty.com/rucio/main/shokyu/jugyou17.htm
(Visual Basic 中学校 第17回 関数2 )
ここら辺りで自作の方法を模索してみてはいかがでしょう。


おゃ  2007-05-05 09:20:37  No: 136237

フォームにコマンドボタン(Command1(0)、Command1(2)、・・・、Command1(99))を100個貼り付けて次のコードを実行してみてください。

Dim Command(10, 10) As CommandButton

Private Sub Form_Load()
    For i = 0 To 99
        Set Command(i \ 10, i Mod 10) = Command1(i)
    Next i
End Sub

Private Sub Command1_Click(Index As Integer)

    x = Index \ 10
    y = Index Mod 10

    Command(x, y).Caption = "●"

End Sub


かつのり  2007-05-17 23:30:32  No: 136238

自分もコントロール配列の多元配列について探していたので参考にさせてもらいました。
ありがとうございます。

「おゃ」さんのコード(上記)を元に下記コードを作ってみました。

ファームにコマンドボタン(1個)、ラベルを配列(6列、3段)にして(18個)貼り付けて下記コードを実行してみて下さい。

Option Explicit
Dim Label(6, 6) As Label

Private Sub Command1_Click()
    Label(2, 0).Caption = "●"
End Sub

Private Sub Form_Load()
    Dim j As Integer
    For j = 0 To 18
        Set Label(j \ 6, j Mod 6) = Label1(j)
    Next j
End Sub

もっと良い方法があれば教えて下さい。
(質問者様すみません・・・)


我龍院  2007-05-18 01:12:14  No: 136239

魔界の仮面弁士さんが言ったのは、多分下の様なコードでしょう。
ファームにラベルを配列(6列、3段)にして(18個)貼り付けて、下のコードを実行して、
ついでにラベルもクリックしてみて下さい。

Private Sub Form_Load()
    Dim i As Integer
    Dim j As Integer
    For i = 0 To 5
        For j = 0 To 2
            Label(j, i).Caption = "(" & j & "," & i & ")"
        Next
    Next
End Sub

Private Sub Label1_Click(Index As Integer)
    Label(Index \ 6, Index Mod 6).BackColor = vbRed
End Sub

Private Function Label(ByVal row As Integer, ByVal col As Integer) As Label
   Set Label = Label1(row * 6 + col)
End Function

VB.NETならFunction名にLabel1が使用できるので、ますます偽装の完成度が
上がります。


我龍院  2007-05-18 01:55:00  No: 136240

>VB.NETならFunction名にLabel1が使用できるので、ますます偽装の完成度が
>上がります。
と言うのは間違いで、VB.NETの場合は全く事情が違いますね。orz


かつのり  2007-05-18 02:25:30  No: 136241

我龍院さん  ありがとうございます。
とてもシンプルでいいコードですね!!
勉強になりました!


なお  2007-06-01 00:52:08  No: 136242

返答が遅くなりました。
大変参考になりました。

ちょっと試してみたいと思います。
ありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加