投稿日 | : 2005/01/06(Thu) 15:42 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re^3: ボタンコレクションを引数として渡す |
> 匿名くん さん、どうもありがとうございます。素早い回答ですね。
>
> > cmd(i) は、オブジェクトのコレクションではなく、オブジェクト配列では。
> そうですね。「コントロール配列」と呼ぶのがもっとも適切なのかも。
VB6の「コントロール配列」は、一種のコレクションオブジェクトなので、
あながち間違っても居ないと思いますよ。
とはいえ、ボタンコレクションという表現は誤解をうみそうなので、
やはり、コントロール配列という表現を使った方が、意図を伝えやすいかと。
> ちょっとコレクションとは違うところがあるのかも。添字が付いていることから「配列」ですね。
混同させてしまいそうなのですが、実は「コントロール配列」は『配列ではありません』。
上記にも書いたように、VB固有のコレクションオブジェクトです。
(本当に「配列」だとしたら、UBoundプロパティではなく、UBound関数を使う必要がありますね)
> ええっ。そうなんですか?
それはおそらく、MSKBの記事を参考に書かれた物なのでしょうね。
hhttp://support.microsoft.com/default.aspx?scid=kb;ja;408439
確かに、「コントロール配列」を『Controlの配列』として渡したいのであれば、
そこに書かれたように、個別にControl型の変数に格納する必要があります。
しかし、『「コントロール配列」コレクション』のまま渡すのであれば、
汎用型の As Object を使うことで、プロシージャにも渡せます。
# 「コントロール配列」を表す固有の型は用意されていませんので、
# 汎用型のObjectやVariantなどを使う必要があります。
Option Explicit
Private Sub Command1_Click(Index As Integer)
Call Sample(Command1)
End Sub
Private Sub Sample(ByVal Controls As Object)
'Dim X As VB.Control
Dim X As VB.CommandButton
For Each X In Controls
Debug.Print X.Caption
Next
End Sub