ワークプレースとモジュールを使った処理の実例
ワークプレースとモジュールを使用したサンプルアプリケーションの構造については既に取り上げました。メインフォームには2つのワークプレースがあります。1つはフォームの左側、もう1つは右側です。左側のワークプレースはDashboardモジュールをロードします。これがさらに他のモジュールを起動することもあり、右側のワークプレースに表示することもあれば、左側のDashboardを置き換えることもあります。図5と図6はその例です。
WTWorkplaceクラスとWTModuleクラスの使い方は簡単です。サンプルアプリケーションのワークプレースの名前は、左側がmainPanel、右側がworkPanelです。DashboardモジュールはWTModuleを継承し、TargetWorkplaceというプロパティを新たに追加しています。このプロパティは、最初は右側のワークプレースworkPanelへの参照を保持しています。
Dashboardをメインフォームにロードするコードは次のとおりです。
private void Form1_Load(object sender, EventArgs e) {
Dashboard d = new Dashboard();
mainPanel.LoadModule(d, null);
d.TargetWorkplace = workPanel;
}
これでDashboardは、自身と同じワークプレースへのモジュールのロード(自モジュールの置き換え)、または右側のワークプレースへのモジュールのロードを行えます。実行例を次に示します。
// Dashboard loads Browser module in right workpanel TargetWorkplace.LoadModule(new BrowserModule(), this); // . . . // Dashboard loads data entry module in own workpanel HostWorkplace.LoadModule(new ModuleName(), this);
ロードされたモジュールは終了時にCloseModule(...)メソッドを呼び出します。呼び出し側のモジュールに渡すべきデータがある場合は、CloseModuleの引数にあるWTCancelGenericEventArgオブジェクトを利用します。次のコードはその例です。
// in called module, in the event handler for Save button
private void buttonSave_Click(object sender, EventArgs e) {
WTCancelGenericEventArgs evt = new WTCancelGenericEventArgs();
// add data to pass back to calling module
Evt["FirstName"]= textFirstName.Text;
Evt["LastnName"]= textLastName.Text;
Evt["Age"]= textAge.Text;
CloseModule(evt);
}
呼び出し側のモジュールがデータにアクセスするときには、キーを使用するか、またはforeachで全データフィールドへの反復処理を行います。
// . . .
// in caller module, the code for Refresh method
public override void Refresh(WTCancelGenericEventArgs e){
// if cancel is true, the called module was closed with cancel button
if (e.Cancel)
statusBar1.Text = "Name was canceled";
else {
ContactBO contact = new ContactBO();
Contact.FirstName = e["FirstName"];
Contact.LastName = e["LastName"];
statusBar1.Text =
string.Format("Welcome, {0}",
e["FirstName"].ToString());
}
}
本稿のダウンロードファイルには、Visual Studio 2005用と2008用の両方のサンプルソリューションが含まれています。Web.Configで開発プラットフォームに合った正しいバージョンを設定してください。


