【Colum】


Visual Basic のクラスとその利用法
 VBのクラスの意味や使い方は、なかなか難しいのではないかと思います。
しかしコツさえ掴めばそれほど難しいものではありません。
 この章では、そのクラスの定義から簡単な利用法までをVisual Basic標準のコントロール と対比させながら、解説しています。


(クラス)
 Visual Basicを使用してアプリケーションを作るとき、特にこのクラスを 知らなくても問題はありません。クラスを利用したからといって、プログラム が高速化されるわけではないですし、それ程わかりやすいものとなるわけでも ありません。
 つまり、必要性があまりないわけです。  しかし、少し複雑なプログラムになってくると、とても便利な機能であるこ とは、間違いありません。プログラムをクラス化しておくと、同じ類のものは これを利用すればいいわけですから、手間が省けます。
 クラスは、オブジェクト指向のプログラミング開発には、欠かせない存在 なのです。
 ただ、余りプログラミングになれていない間は、クラス化するよりも 何度でも同じものを打ち込んだほうがいいかもしれません。


(クラスとコントロールの相違)
 ラベルコントロールやテキストボックスコントロール等のVisual Basic標準のコントロールは、一種のクラス と考えることができます。
 違う点といえば、

1.クラスは自ら作るものであり、コントロールは、最初から できあがっていること
2.インスタンスの発生の時期

の2点ぐらいでしょうか。
「インスタンス」という言葉で敬遠されるかもしれませんが、なん らかの電気製品の電源にでも例えればわかりやすいと思います。電源を押した とき装置のボタンが利用者の指示を受け付けられるのと同じで、インスタンス の発生によりクラスの機能が使えるようになります。

(クラスの定義)
 クラスを何かに例えると、よくあるのが「設計図」です。まず、車を例に して考えてみましょう。車は、1つの車としての製品ですが、それはいく つものパーツ(部品=オブジェクト)から成り立っています。それらの部品は、 それぞれの設計図に従って作られます。クラスはこの「設計図」にあたります。 変数のように宣言することによって、インスタンスが発生し、オブジェクト (部品)となります。
 コントロールもフォームに貼り付けられる前は、「設計図」にすぎません。 貼り付けられることによって、インスタンスが発生し、オブジェクト(部品) となります。
「そういった部品を組み合わせてプログラムを組み立てる」、 そのことをオブジェクト指向プログラミング、といいます。
 製作されたオブジェクトに対しては、プロパティ値をセットしたり、 メソッド(機能)を実行したりすることができます。このあたりの考え方は、 クラスもコントロールも変わりません。

(クラスのメソッド、プロパティ)
 クラスモジュールを追加したあと、それに「機能」を付随 させていきます。そして、その「機能」に当たるのがメソッドやプロパティです。
 メソッドは、オブジェクトに直接働きかける命令文のことをいいますが、クラスのメッソ ドは、標準モジュールなどのプロシージャと同じようなものです。。
 しかし、プロパティの考え方は少しややこしいものとなっています。
ラベルコントロールには、Caption や Visible プロパティがありますが、

.Caption = "文字列"
.Visible = False Or True

のように前者は、String 型,後者は、Boolean 型の変数であることがわか ります。でもこれらのプロパティは、ただの「変数」ではありません。
Caption プロパティに文字列を代入するとラベルオブジェクトにその文字列が表示されま すし、Visible プロパティにFalse Or Trueを入れると、ラベルオブ ジェクトが見えるようになったり、見えなくなったりします。
 このことは、これらのプロパティがただの「変数」でないことを証明していま す。「変数」に値をセットしたとき、プログラム内部で、オブジェクトにそう いった命令が働きます。その一連の命令をプロパティプロシージャと呼びます。 クラスに追加するプロパティといえば、通常このプロパティプロシージャを指します。 プロパティプロシージャには、
値がセットされたとき実行される Property Set プロシージャ
値を得たとき実行される Property Get プロシージャ
などがあります。
もし、単にクラスのプロパティを変数として利用したいのなら、パブリック変数とし て宣言すればいいのです。

(クラスの利用法)
 この辺で、クラスをつくってみましょう。
 ドライブリスト,フォルダリスト,ファイルリストボックスを連動させ、ファイ ル名を選択させる。いってみればファイル選択ダイアログのようなものですが 頻繁に利用される方も多いと思います。  しかし、これらを利用すると、ファイル名をフルパスで得るためにコードを 付け加える必要があります。何回も同じコードを追加するのは、非常に面倒 な作業となります。そこで、これを例にクラスを使ってみることにします。  以下のようにフォームにコントロールを配置したあと、新規クラスを挿入させて下さい。 特にクラスのプロパティを変更する必要はありません。



 そして、以下のようなファンクションプロシージャをクラスに追加させ、 フォームのFile1_Click()プロシージャにもコードを記入します。

GetFileNameプロシージャ
'------------------------------------------------------------
'プロシージャ名 GetFileName
'引数 ファイルリストボックス
'戻り値 フルパスファイル名
'------------------------------------------------------------
Public Function GetFileName(FileList As Object) As String
  Dim mfn As String 'ファイル名格納
  Dim mfp As String 'ファイルパス格納
  mfn = FileList.filename
  mfp = FileList.Path
  'パス名の最後に\がなければ付け足す
  If Right$(mfp, 1) <> "\" Then mfp = mfp & "\"
  'フルパスファイル名を返す
  GetFileName = mfp & mfn
End Function

File1_Click()プロシージャ
Private Sub File1_Click()
  Dim cf As New Class1
  Label1.Caption = cf.GetFileName(File1)
End Sub


 これで、ファイルリストボックスをクリックしたとき、その指定するファイル名が フルパスで、Label1に表示されるようになります。
 一度このようにクラス化しておくと上記のようにフォームに記述する部分は、 たった2行ですみます。その上、プログラムコードが長くだらだらしたものと なったとき、内容別にクラス化させておくとあとで修正したり変更したりする ときに非常に扱いやすくなります。
 また、クラスのプロシージャには、コントロール(オブジェクト)を引数にして おくと、呼び出すときにオブジェクトを指定するだけで、それに直接 働きかけることができるので非常に効率が良くなります。
 それだったら標準モジュールと変わらないのでは、と思う方もいる ると思います。実際、内容によっては、どちらでまとめてもあまり変わらない ときもあります。
 しかし、標準モジュールは宣言しなくても利用できるため、結果的に グローバル変数となってしまい、プログラムコードがややこしくわかりにくい ものとなってしまう場合があります。
 クラスの場合、プログラムの流れ上、利用したいときだけ宣言して呼び出すわけです から、こちらの方がプログラム言語らしいと言えます。


(サンプルプログラムの動作確認)

機種 PC-9821V13S
OS Windows95
開発ツール Visual Basic Ver.4.0
更新日 99/09/06

ダウンロード Class.lzh(1.53KB)

Visual Basic Ver.5.0でも問題なく動作すると思います。
なお、このコーナーに掲載されているプログラムコード、およびプログラムファ イルが原因で起きた損害などに関して一切の責任を負うことはできません。

★このコーナーに掲載されているプログラムコード、およびプログラムファ イルを無断で配布・転載することは、原則として禁止です。