コレクションを使ってある情報のかたまりを作り、
必要に応じてテキストやリストに表示する機能を作っています。
コレクションについて色々なサイトを調べてみたのですが、
あまり良くわかりませんでした。
よろしければ、コレクションについて分かりやすく書いているサイトなどを教えてください。
環境は、VB6.0です。
よろしくお願いします。
> コレクションについて色々なサイトを調べてみたのですが、
> あまり良くわかりませんでした。
具体的な使い方なのか,それとも使い所がわからないのか,
経験不足による分からない症候群なのか,よくわかりませんが,
VB中学校様がいいかもしれません:
http://homepage1.nifty.com/rucio/main/shokyu/jugyou23.htm
ガッさん、ありがとうございます。
VB中学校は、以前調べていたのですが、今回使いたい処理とは
違うようです。
コレクションの具体的な情報は、氏名、生年月日、住所、電話番号等をコレクションとしてもっておき、住所が東京都の人の情報だけを、
リストに表示(氏名、生年月日、住所)させたいです。
コレクションについて分からないポイントは、
・具体的な使い方
・コレクションの使いどころについて です。
よろしくお願いします。
うーん,残念ながら
氏名、生年月日、住所、電話番号等をコレクションとして扱うサンプル
を紹介しているサイトは知りません.
コレクションはサイズ可変長で,動的に値を追加/削除可能な配列だと考える事が出来ます.
例として,以下の4つのクラスを使うアプリケーションが浮かびました.
何かの参考になれば嬉しいです.
---------------------------
'Record.cls
'氏名、生年月日、住所、電話番号をレコードとして持つクラス
Public Name As String
Public BirthDay As Date
Public PostalAddress As String
Public PhoneNumber As String
---------------------------
'IFilter.cls
'Collectionをフィルタリングするインターフェイス
Public Function Filter(ByVal col As Collection) As Collection
End Function
---------------------------
'AndohFilter.cls
'RecordのNameが安藤から始まる人だけを選択するフィルタ
Implements IFilter
Private Function IFilter_filter(ByVal item As Record) As Boolean
If item.Name Like "安藤*" Then
IFilter_filter = True
Else
IFilter_filter = False
End If
End Function
---------------------------
'Records.cls
'Recodクラスをコレクションとして扱うクラス
Private col_ As Collection
Private Sub Class_Initialize()
Set col_ = New Collection
End Sub
Public Sub add(ByVal v As Record)
col_.add v
End Sub
Public Sub add2(ByVal Name As String, ByVal BirthDay As Date, ByVal PostalAddress As String, ByVal PhoneNumber As String)
Dim rec As Record
Set rec = New Record
With rec
.Name = Name
.BirthDay = BirthDay
.PostalAddress = PostalAddress
.PhoneNumber = PhoneNumber
End With
col_.add rec
End Sub
Public Function Filtering(ByVal filter As IFilter) As Records
Dim rec As Records
Dim item As Record
Set rec = New Records
For Each item In col_
If filter.filter(item) Then
rec.add item
End If
Next
Set Filtering = rec
End Function
Public Function getCollection() As Collection
Set getCollection = col_
End Function
---------------------------
'Form1.frm
'Recodsクラスを使ったサンプル
Private Sub Form_Load()
Dim recs As Records
Set recs = New Records
recs.add2 "安藤A", #1/1/1954#, "住所1", "000-1111-111"
recs.add2 "安藤B", #2/2/1954#, "住所2", "000-2222-222"
recs.add2 "佐藤A", #3/3/1954#, "住所3", "000-3333-333"
recs.add2 "佐藤B", #4/4/1954#, "住所4", "000-4444-444"
Dim rec As Record
'recsに含まれるレコード全体を表示
For Each rec In recs.getCollection()
Debug.Print rec.Name
Next
'recsに含まれるレコードの内,名前が安藤から始まるものだけを表示
For Each rec In recs.Filtering(New AndohFilter).getCollection()
Debug.Print rec.Name
Next
End Sub
ガッ氏の
>コレクションはサイズ可変長で,動的に値を追加/削除可能な配列だと考える事が出来ます.
が端的に特徴を表している気がするが、その他にも(書かれたコード上には存在するが)
For Eachで要素数等を気にすることなくループ検索等が出来る事などが挙げられると思う
あと、基本的に何でも(と言うと語弊があるか?)入れられるので、例えばコントロールへの参照を
コレクションに入れておいて、内部的にコントロールのグループを作ってみたり
なんて事も出来るはず
ちなみにVB6の場合、以前調べてみた感じだとコレクションのIndexは1からみたいで、
途中を削除しても(当然かもしれないが)空き番は生じず、詰められる