|
kobasanさん、ichinose さん:
こんにちは
先ず、知らなかったことがあります。
これは私が、dictionaryをいわゆる辞書としてしか使ったことがない事が
原因で、配列をItemの要素として、格納できることを知りませんでした。
kobasanさんのご指摘で検証してみて納得しました。
Sub test2()
Dim dic
Dim I As Long
Dim a(5) As Long, b(5) As Long, c(5) As Long
Set dic = CreateObject("Scripting.Dictionary")
For I = 0 To 4
a(I) = I
b(I) = I + 1
c(I) = I + 2
Next I
dic(0) = a
dic(1) = b
dic(2) = c
For I = 0 To 4
Debug.Print "a=" & dic(0)(I) & " ; b=" & dic(1)(I) & " ; c=" & dic(2)(I)
Next I
End Sub
>私は逆にCollectionでなければならない理由がしりたいですねえ!!
に付いては上記の「知らなかった」のが原因です。従って、このケースの
場合Collectionでなければならない事はありません。
collectionに関してですが、決定的な違いはdictionaryにはObjectへの参照を
格納できないと思っていたのですが、
ichinose さんの
>是非、ご意見を聞かせてください。
で、ざっと検証してみました。結果できるようですね。
'UserFormにTextBox,ListBox,ComboBoxを各1個ずつ配置
Sub test2()
Dim dic
Dim I As Long
Dim a As Object
Dim b As Object
Dim c As Object
Set dic = CreateObject("Scripting.Dictionary")
Set a = UserForm1.TextBox1
a.Text = "TextBox1Sample"
Set b = UserForm1.ListBox1
b.AddItem "ListBox1Sample"
b.ListIndex = 0
Set c = UserForm1.ComboBox1
c.AddItem "ComboBox1Sample"
c.ListIndex = 0
Set dic(0) = a
Set dic(1) = b
Set dic(2) = c
Debug.Print "a:" & dic(0).Text & " b:" & dic(1).Text & " c:" & dic(2).Text
End Sub
以上の結果を踏まえると、
「カスタム オブジェクト モデルを作成する場合、Collection オブジェクトを使用して
カスタム コレクションへの参照を保存することができますがDictionary オブジェクトではこの操作は行えません」
は手間がかかるので検証してませんが、ここまで可能ならカスタム オブジェクト ・・・
以外には「もっと決定的な利点」は知りません。
ただ、やはり、私はobjectにはcollection、辞書的機能にはdictionaryを使うと思います。
(なじみの問題とcollection、dictionaryと言う言葉がわかり易いからですが^ ^;)
今思ったんですが、Classに子Classを持たせる際はカスタムオブジェクトだからやはり、
Collection しか使えないのかな???
kobasanさん、ichinose さんのご指摘、ご指導には感謝いたします。
自分で検証をした事でDictionary に対する理解が少しは深まったように思います。
kobasanさんの
>>・・・やはり省略せずにキッチリaddしたほうが可読性はよくなりますね。
>このあたりは、作る人の好み次第と思いますが。
それはそのとおりなのですが、やはり、入れるところを確保せずに入力するのは
作法から外れるようで抵抗がありますね。
これも個人的な好み、感覚ですが、規定のプロパティを省略したり、暗黙の参照などが嫌いなのと同じです。
好みなら、そうですかとしかいえませんけどね。
質問(煮詰まった) さん>
横道にずれてごめんなさい。で、肝心の問題はどうなったんですかね?
せっかく詳しい方が、訪れているので聞いた方がいいですよ。
|
|