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
2次元配列に見せかけるために、
Function GetButton( ByVal row As Integer, ByVal col As Integer) As CommandButton
などの関数を自作してやれば良いかと。
魔界の仮面弁士さん
かきこありがとうございます。
Functionの使い方を探したのですが、使っている本にも書き方が乗っていないので、具体的な構文がわかりません。
詳しく教えていただけないでしょうか?
アクアと申します。宜しくお願いいたします。
明確な回答ではありませんが、ご容赦ください。
概ね初心者用の入門書であればSubプロシージャとFunctionプロシージャはセットで解説にあります。
Functionプロシージャは基本の部類に属してますので、もし載っていないのならば、もっと初心者用の書籍がいるかと思います。
Web サイトなら
ttp://homepage1.nifty.com/rucio/main/shokyu/jugyou17.htm
(Visual Basic 中学校 第17回 関数2 )
ここら辺りで自作の方法を模索してみてはいかがでしょう。
フォームにコマンドボタン(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
自分もコントロール配列の多元配列について探していたので参考にさせてもらいました。
ありがとうございます。
「おゃ」さんのコード(上記)を元に下記コードを作ってみました。
ファームにコマンドボタン(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
もっと良い方法があれば教えて下さい。
(質問者様すみません・・・)
魔界の仮面弁士さんが言ったのは、多分下の様なコードでしょう。
ファームにラベルを配列(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が使用できるので、ますます偽装の完成度が
上がります。
>VB.NETならFunction名にLabel1が使用できるので、ますます偽装の完成度が
>上がります。
と言うのは間違いで、VB.NETの場合は全く事情が違いますね。orz
我龍院さん ありがとうございます。
とてもシンプルでいいコードですね!!
勉強になりました!
返答が遅くなりました。
大変参考になりました。
ちょっと試してみたいと思います。
ありがとうございました。
ツイート | ![]() |