VBはC言語と違って基本的にポインタがない。それでも、線形リストを作りたい。はて、どうしたもんだろ?
C言語は次のような構造体宣言ができる。
typedef struct _udtList
VBで構造体を使ってこれと同じことをしようとしても基本的にはできないんだよね。基本的にというのは、やろうと思えばできるからこのように言ったんだけど……。う〜む、まぁ、一言いっておくと、VarPtr という関数を使えばできそうな気がする………。さて、話を元に戻して、正当な、VB的な方法といえば、やっぱりクラスの使用でしょう。クラスはオブジェクトであり、いくらでも生成できる。また、オブジェクトは引数として渡せる。上の構造体と同じことをするには、つまり、クラスを構造体のように扱ってやればいいのである。イメージ的には、次のような構造体を用意すればいいわけである。
Type udtList
さぁ〜て、それでは、"clsList"というオブジェクト名のクラスを用意して次のコードを書いちゃいませう。
Public l_Name As String '名前 どう?これで。"clsList"という名前で、"l_name", "l_Tel", "l_ptr" とメンバがある構造体に見立てることができたでしょ。いと、すばらし。 ここまでいったら、一気に行くよ。フォームモジュールにテキストボックス2つ、コマンドボタン2つ配置して次のコードを書きましょう!!
Private Root As New clsList 'ルートクラス Private Sub cmdAdd_Click()
Ifhen Exit Sub
With Work
'線形リストにデータを追加する
txtName = "" End Sub Private Sub cmdPrint_Click()
'線形リストのデータを表示する End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'線形リストで使用したclsListを解放する Set Work = Nothing End Sub
'------------------------------------------------------------------- Dim nClass As New clsList Set CreateObjClass = nClass End Function
'------------------------------------------------------------------- If srcRoot.l_Name = "" Then
With srcRoot End Sub
'-------------------------------------------------------------------
If srcRoot.l_Name <> "" Then
Call PrintData(srcRoot.l_ptr)
End Sub
'-------------------------------------------------------------------
If srcRoot.l_Name <> "" Then End Sub おそらく、2分木もこの方法でできるのではないかと思ってしまう今日このごろであった。 |