SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Visual WebGUIによるAJAX対応CMS(コンテンツ管理システム)の構築
フレームワークの作成

柔軟なソフトウェアシステムの開発には、強固なフレームワークが不可欠

ワークプレースとモジュールを使った処理の実例

 ワークプレースとモジュールを使用したサンプルアプリケーションの構造については既に取り上げました。メインフォームには2つのワークプレースがあります。1つはフォームの左側、もう1つは右側です。左側のワークプレースはDashboardモジュールをロードします。これがさらに他のモジュールを起動することもあり、右側のワークプレースに表示することもあれば、左側のDashboardを置き換えることもあります。図5と図6はその例です。

図5 サンプルアプリケーション:サンプルアプリケーションで、左側のワークプレースにDashboardモジュールを、右側のワークプレースにブラウザモジュールを、それぞれ読み込んだ例
図5 サンプルアプリケーション:サンプルアプリケーションで、左側のワークプレースにDashboardモジュールを、右側のワークプレースにブラウザモジュールを、それぞれ読み込んだ例
図6 データ入力モジュールを使用したサンプルアプリケーション:こちらのサンプルアプリケーションでは、右側のワークプレースにはブラウザモジュールが、左側のワークプレースにはデータ入力モジュール(Dashboardから起動したもの)が、それぞれ表示されている
図6 データ入力モジュールを使用したサンプルアプリケーション:こちらのサンプルアプリケーションでは、右側のワークプレースにはブラウザモジュールが、左側のワークプレースにはデータ入力モジュール(Dashboardから起動したもの)が、それぞれ表示されている

 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で開発プラットフォームに合った正しいバージョンを設定してください。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Bogdan Zamfir(Bogdan Zamfir)

 コンピュータ科学で修士号を取得。1993年から独立系コンサルタント兼ソフトウェア開発者として活躍する。Webアプリケーションとデスクトップアプリケーションの両方を手がける。使用言語とプラットフォームは、C#、VB.NET、Visual FoxPro、Microsoft Access、Visual ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4395 2009/09/24 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー