【 擬似からの脱却 】 [ Breakthrough in the Pseudo-Control Arrays ]
[ clsBpca の 軌跡 ] [ 前頁 , 次頁 , §1 , §2 , §3 , §4 , §5 , §6 , §7 , §8 , §9 , §10 , §11 , §12 ]
[ 汎用クラス , トグルラベル クラス , Focus クラス , クラス アドイン , カレンダークラス ] [ 質問はメールへ ]
(前節より‥‥‥)
それは良いけど、クリックイベントの方はどうなの? まとめる方法は無いの? (・・?
確かに、オブジェクトへの参照方法については、前節までのような方法で記述を一元化できま
したが、未だ、イベントプロシジャーそのもののコーディングが一元化できずに残っていますね。
『イベントプロシジャー』が7個必要なことに変わりはない。
Private Sub cmdWeek1_Click()
Call cmdWeek_Click_Sub(1)
End Sub
Private Sub cmdWeek2_Click()
Call cmdWeek_Click_Sub(2)
End Sub
:
:
Private Sub cmdWeek7_Click()
Call cmdWeek_Click_Sub(7)
End Sub
そこで、イベントの一元化に使われるのが「クラスモジュール」です。 φ( ̄▽ ̄)o
ただ‥‥‥ (ー_ーゞ
ところで、クラスモジュールって、そもそも何? (・o・)
という話から始めなければ、先に進めませんので、以下に整理してみました。「訳判らん」という
用語が沢山出て来ると思いますが、出来るだけ噛み砕いて説明しているつもり(?)ですので、
頑張って読み進んでください。 p(・∩・)q
ハイ、そこの人、逃げないで ヽ(・_・)−C</ ̄ー ̄;)/ ((((((^_^;) 逃避モード
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
cmdSun/cmdWeek1 といった UserForm に貼り付けたコマンドボタンには、
・ オブジェクト名の後にピリオドは挟んで [BackColor] 等と記述すれば、Command
Button が持つ属性を参照/更新できる【 プロパティ 】
・ オブジェクト名の後を [ _Click ( ) ] と続けた名前で Sub プロシジャーを記述すれば、
マウスクリックという操作をした時に自動的に、そのプロシジャーを呼び出してくれる
【 イベント 】
・ オブジェクト名の後にピリオドを挟んで[SetFocus] とか [Move]等と記述すれば、その
CommandButton にフォーカスを移したり、位置を移動させたりできます。こちらは、
【 メソッド 】と呼ばれるものです。
(補) プロパティ と メソッド 、どちらも「オブジェクト名の後にピリオドを挟んで」
記述しますので、同じように思えますが、例えて言えば、普通のモジュール
での [ Function ] と [ Sub ]に相当します(実際、メソッドの定義には Sub
ステートメントを使います。プロパティの方は Property Let/Get という
ステートメントを使います)。
プロパティは、クラスオブジェクトと利用側との間で、「ひとつの値 を 渡し
たり/受け取ったり」する為のインターフェースです。代入演算子( = )の右辺
や左辺で使ったり、[式]の中に記述したりします。
メソッドは、クラスオブジェクトに対して「ある動作(その内容はクラス内に
定義してある)」をさせる為の命令指示です。 SetFocus/Move のように、本
当に動きをさせるだけでなく、クラスオブジェクト内に一度に複数の値を格納
させる場合にも使えます。
プロパティ( Let )も、値をクラスオブジェクトへ格納させる機能ですが、代入
演算子( = )を挟んで、左辺にプロパティ/右辺に格納する[値]という使い方を
しますので、渡せる値はひとつです。
といったものが備わっています( CommandButton ならば、どの CommanButton であっても
同じ様に備わっています)。これは、大元として( CommandButton の場合)
『 MsForms.CommandButton 』
という「プロパティ/イベント/メソッド」を定義した雛形(型紙、テンプレートと言っても良い)と
いうものが先ず有り、cmdSun/cmdWeek1 といったコントロールを UserForm 上に貼り付け
た時に、
その cmdSun/cmdWeek1 が持つべき属性として
『MsForms.CommandButton 』という雛形が割り当てられる
為です。元が同じ物をコピーしているので、cmdSun も cmdWeek1 も「同じプロパティ/イベント
を備えている」という結果になっている訳です。
この雛形の事を【 クラス 】と呼びます。
クラスそのものには「実体」はありません。あくまで「枠組み」が有るだけです。 cmdSun/cmd
Week1 などの実体(オブジェクト)に写し取られる事で始めて働く事ができます。
洋服の型紙(紙)が、それ自体では「洋服の素材」とはなり得なくても、その形を布地に写し取
らせる事で、その布地に「洋服の素材」という『働き』をさせる事ができる、というのと同じです。
型紙はたった1つでも、色々な「柄や色」の布地を用意すれば、色々な「柄や色」の洋服が幾
つでも作れますね(柄や色は違ってもサイズ/デザインは同一)。
同じように、クラスの定義そのものは「たった1つ」でも、cmdSun/cmdWeek1 など複数のオブ
ジェクトに適用すれば、それら複数のオブジェクト全てに「(クラス内に定義してある)同じ機能」
を持たせる事ができます。
このクラス(雛形)の形を写し取らせて、実体あるもの(オブジェクト)に、クラスで定義した機能を
持たせる(引き継がせる)事を
【 インスタンスの生成 】
と呼びます(大体、この辺りで、 ((((((^_^;) 逃避モード に入りますね。大方の人は‥‥ (-。-)y-゚゚゚ )。
[ MsForms.CommandButton ]というクラスは、Microsoft が UserForm 向けに用意しているもの
ですが、ユーザーサイドでも「カスタムメイドのクラス」を定義する事ができます。そのカスタムメイド
のクラスを定義/格納する場所が「クラスモジュール」と呼ばれる場所です。
ハイハイ、細かい事は良いから‥‥‥ ヽ(ー_ーヽ)
そんな事より、「使い方」教えて、使い方! ヽ(-.-;)
[ 前頁 , 次頁 , §1 , §2 , §3 , §4 , §5 , §6 , §7 , §8 , §9 , §10 , §11 , §12 ]
[ 汎用クラス , トグルラベル クラス , Focus クラス , クラス アドイン , カレンダークラス ] [ 質問はメールへ ]
[ Home へ戻る ]
|
||
角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2004 Allrights Reserved. |