|
筆者がコントロールを開発するためのプロセスを紹介する。 ●コンポーネント(コントロール)開発方法 いくつかの方法がある。目的に応じて選ぶが、ここでは、ユーザコントロールを利用している。以下があるらしい。 ○種類 ・既存コントロールの改良、機能追加 これは、例えばボタンに独自の機能を追加する場合などの方法で、そのコントロールを継承する。 ・複数のコントロールによる新機能の開発 これは、コンテナになる標準のコントロールつまり、ユーザコントロールを利用し、既存のコントロールを複数貼り付け、新しい機能を付加するもの。ユーザコントロールは、Formsを継承しているので、ウィンドウフォームの開発にほぼ同じとなる。この場合、自分自身の外形の描画、再描画は自動的に行われるが、必要であればクライアント領域の描画もできる。 .NETで、コントロール開発を選ぶとデフォールトで空白のユーザコントロールが生成される。通常は、この状態でほぼ必要なコントロールは開発できると思う。 ・無から開発 これは、コントロール(自分自身)の形状から自分で描画する本格的なもの。Controlを継承する。エンドプログラマにオーナードローをさせるなどの高度な機能も実装できる。 ○デバッグ方法 コンポーネント自体は単独で実行できないので、デバッグするホストが必要となる。通常は、ソリューションにウィンドウフォームアプリケーションのプロジェクトを追加し、そのアプリで、目的のコントロールを貼り付けて試験プログラムを組む。このとき、コントロール自体のコードディバッグのために、xxxxxx\bin\Releaseにある.dllを参照すると良い。これで、コントロール内でのアドレスストップやシングルステップ、変数、配列内容の観測ができる。 ○プロパティ、メソッド、イベントの実装方法 これらは、一般の書物や解説に拠られたい。 但し、FreeGridは、簡易でお気楽コントロールなので、規則やしきたりは守っていない。自由自在となっている。 ●イベントの捕捉 エンドユーザと同列のイベント処理ではまずいことになる。 このため、必要なイベントは、エンドユーザ(エンドプログラマ、つまり、このコントロールを使ってプログラムする者)より先に補足し、必要な処理をしないといけないこともある。 ○OnXXXXXX関数 基底クラスにあるイベント処理の関数で、通常は隠されているが、必要ならこれをオーバーライド*する。例えば、描画では、 Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) とすれば、基底クラスの描画処理に乗り込める。ここで、エンドプログラマより先(先か後は個別問題であるが)に自分で描画できる。エンドプログラマにイベントを渡す場合は、 MyBase.OnPaint(e) とすれば良い。これで、エンドプログラマが記述したデリゲート(Paintイベント処理)を探し、それを呼び出すようになる。 →* ○実際
●開発の手順 製品開発ではないので、お気楽に開発すれば良い。また、RADツール(VB.NET)を使っているのだから、最大限それを生かすのが良い。 ○何が欲しいのか? 初めにありき、ではなく、エンドユーザとして何が欲しいかである。つまり、ユースシナリオから始まる。例えば、FreeGridでは、
が、始まりである。上記のような具体的でもあり漠然とした要望でもあるものを元に、必要な機能の抽象化を行う。 ○抽象化 以下の最小限の機能定義から出発した。RADなので、これらを実現しつつ、仕様を膨らませて行けば良い。VBの場合は、お決まりの部分や、お約束の部分は、隠蔽されており、システム側で自動的にコードされるので、プログラマは本来の仕様や機能に集中できるのである。 プロパティ、メソッド、イベントの追加はものすごく簡単なので、初期に全てを決める必要はない。基本的に、それらが独立的であればあるほど、後での追加は全く他に影響なくできる。影響がある場合は、機能の抽象化がうまく行ってないことになる。
|