「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>アプリケーション設計のポイント]] *目次 [#o1dcb047] #contents *概要 [#dc0bf14e] リッチクライアントの場合のポイント *画面遷移方式 [#p046b813] リッチクライアントでは、以下の画面遷移が可能である。 **ウィンドウを用いた画面遷移 [#fc8a476a] -モーダレス=Showメソッド -モーダル=ShowDialogメソッド ***注意 [#x31fcf30] -戻る処理が有る場合は、画面を消さずに退避しておく必要が有り、 -且つ、画面遷移にループが有る場合は、退避した画面を再利用する必要がある。~ (再利用しない場合、画面がメモリ リークし、タスク バー上に画面が増え続ける) -戻る必要が無ければ、遷移元の画面は消去してしまって構わない。~ ただし、ルートの画面(Application.RunさせたForm)は消去できないので残しておく必要がある。 **UserControl切り換え [#c3eb54ef] UserControl切り換える、Webページライクなウィンドウ内の画面遷移 -Windows Forms 、WPFの双方で採用可能。 -WPFではPage Based Navigationと呼ばれるフレームワークが用意されている(Pageを切り替える)。 *画面間インターフェイス [#m6633768] 画面間インターフェイスとして以下を使用できる。 **グローバル変数のハッシュ [#f02cdb85] グローバル変数のハッシュを使用する場合は(WebアプリケーションのSessionのようにタイムアウトも存在しないので、特に常時起動し続けるようなアプリケーションでは)、メモリの冗長な消費ないように、使用済みのハッシュ・エントリを削除するように管理する必要がある。また、画面を複数起動する場合、画面インスタンス毎にハッシュ・エントリを分割するなどの工夫が必要になる。 **画面のプロパティ プロシージャ(or コンストラクタ) [#ka7df993] 画面のプロパティを使用する場合は、画面間でデータを受け渡す場合、(親画面などの)受け取り側が画面インスタンスへの参照を保持している必要があるので、特にモードレス画面間の情報受け渡しにおいて実装方法の工夫が必要になる。画面を複数起動する場合、画面インスタンスの保持と解放(画面のCloseイベントなどを検知してメンバ変数などに保持している画面参照を破棄するなど。) *画面分割方式 [#j5c646a7] **タブ コントロール [#b6ccfff9] 大量の入力フィールドを区分毎に分割する場合に使用する。 **MDIを使用 [#z4553df9] MDIを使用して分割する。 複数の小ウィンドウ(同一画面クラスの複数インスタンス)を、~ 1つの親ウィンドウの管理下で表示させる場合に使用する。 ※ WPFでは標準コントロールではMDIをサポートしないので注意する。 *イベントチェーン [#za241784] リッチクライアントにおいて高い操作性の要件に対応して、イベントによって状態変更を行うプログラムを記述した場合、~ Webアプリケーションと比べ、イベントチェーンの発生によって予期せぬ状態(動作)に陥ることが多い。 このため、TextChanged、CheckedChanged、Selected Index Changedイベントなどでの状態変更は行わず、~ メインの関数(ボタンのクリックイベントのイベントハンドラ等)から呼び出す「状態変更関数」と「状態フラグ」を状態毎に用意して状態変更を行う方式が良い。 -状態À:フラグをAに設定、関数Aを呼び出す。 -状態B:フラグをBに設定、関数Bを呼び出す。 -状態C:フラグをCに設定、関数Cを呼び出す。