この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

7.4.3 顧客の一覧参照
●表示列を設定する

○[OK]ボタンが押されたときの処理
 では次に,[OK]ボタンが押されたときの処理を実装しよう。[OK]ボタンが押されたときには,ユーザーがLIST_GRIDCAPTIONリストボックスにおいて,列名にチェックを付けていたならばデータグリッドの該当列を表示状態にし,そうでなければ非表示状態にするという処理をする。

 すでにList 7-21に示したSetColumnプロシージャの処理において,対象となっているデータグリッドはグローバル変数g_objGridに保存してある。よって,リストボックスに表示されている項目を先頭から順に処理し,項目にチェックが付いていたらグローバル変数g_objGridが指すデータグリッドの該当列を示すColumnオブジェクトのVisibleプロパティをTrueにし,そうでなければFalseにするという処理をすればよい。

 [OK]ボタンには,Fig.7-31に示したようにBTN_OKという名前を付けた。よって,ボタンが押されたときの処理は,そのClickイベントに対応するBTN_OK_Clickプロシージャに記述すればよい。実際に実装したものがList 7-22である。

 ユーザーがLIST_GRIDCAPTIONリストボックスで設定したチェック状況を調べ,データグリッドに反映させているのが5〜7行目の処理である。5〜7行目の処理では,リストボックスに含まれている全項目数を保持するListCountプロパティ分だけループしながら各項目の選択状況を調べ,6行目では対応するデータグリッドの列のVisibleプロパティの値としてその項目のチェック状況を設定している。そのあと10行目で,保持していたデータグリッドを解放し,最後に12行目で自分自身のフォームを閉じるという処理をしている。

 なお,9行目にあるHoldFieldメソッドは,データグリッド列の表示設定をこのまま保存して,次回に別のADODB.Recordsetオブジェクトが結び付けられても,列が初期状態にならないようにするためのものである。もし,HoldFieldメソッドを呼び出さないと,データグリッドに新しいADODB.Recordsetオブジェクトが結び付けられたとき――つまり,List 7-19で示したRefreshDataプロシージャが呼び出されたとき――に,データグリッドの列の表示設定が元に戻ってしまう。

○[キャンセル]ボタンが押されたときの処理
 FormSetGridフォームには,Fig.7-31に示したように[OK]ボタンだけでなく,[キャンセル]ボタンもある。ここでは[キャンセル]ボタンが押されたときの処理を実装しておく。

 といっても[キャンセル]ボタンが押されたときには,何もせず,自分のウィンドウを閉じるだけの処理でよい。よって,List 7-23のような処理になる。

○[表示項目]ボタンが押されたときの処理
 以上で,FormSetGridフォームに必要な処理はすべて実装した。あとは,FormCustomerフォームに置かれている[表示項目]ボタンを押したときにFormSetGridフォームを表示し,表示項目を設定できるような処理を実装すればよい。

 [表示項目]ボタンは,BTN_VIEWという名前にしてある(Fig.7-16を参照)。よって,BTN_VIEW_Clickというプロシージャにその処理を記述すればよい。実際に処理を実装するとList 7-24のようになる。

 List 7-24では,4行目でまず,List 7-21で実装しておいたFormSetGridフォームのSetColumnプロシージャの引数としてDGrid_Customerデータグリッドを渡す。これにより,DGrid_Customerデータグリッドの全列のキャプションが可視/不可視状態をチェックボックスで示す形でFormSetGridフォームのLIST_GRIDCAPTIONリストボックスに表示されることになる。そのあと,5行目にあるようにFormSetGridフォームのShowメソッドを呼び出す。引数の1はモーダルウィンドウ表示を示すものである。これにより,FormSetGridフォームがモーダルウィンドウとして表示される。FormSetGridフォームにおいてユーザーが[OK]ボタンを押したならば,List 7-23に示したFormSetGridフォームのBTN_OK_Clickプロシージャが実行され,ユーザーがチェックを付けた列項目のみが可視,それ以外が不可視に設定されることになる。

prevpg.gif Chapter 7 23/65 nextpg.gif