8

私は Windows Mobile (C# とコンパクトなフレームワークを使用) の開発に少し慣れていないので、これを行う方法がわかりません。ユーザーは、ウィザードのような方法で数ページの情報を確認する必要があります。最初にログインウィンドウがあります。

これをどのように実行して実装しますか?ページごとに異なるユーザー コントロールを用意し、要求に応じてそれらを作成/表示および破棄/非表示にできますか? それとも、別のフォームを作成し、何らかの方法でそれらを表示する必要がありますか?

EDIT(OPとは異なるユーザーから)

私もこれに対する適切な解決策を見つけられず、回答の一部からのリンクが Windows Mobile 6.5 で使用できないため、報奨金を開始しています

これらは有望に見えましたが、モバイル 6.5 用にビルドすることはできません

http://weblogs.asp.net/justin_rogers/articles/117859.aspx

http://www.codeproject.com/KB/dialog/WizardForm.aspx

http://www.codeproject.com/KB/miscctrl/DesignTimeWizard.aspx

http://winformswizard.codeplex.com/

http://www.differentpla.net/content/2005/02/implementing-wizard-c (上と同じだが以前の作品)

4

3 に答える 3

6

TabControlを使用してウィザードを「シミュレート」します(Windows Mobile / Compact FrameWorkコンテキストでTabControlを個人的に使用したことありませんが、Microsoftによって「WindowsCE、Windows Mobile for PocketPC。」を参照してください:TabControl

WinFormsでは、ウィザードのようなユーザーエクスペリエンスを作成する場合に、タブを非表示にする簡単なトリックがあります。Form'Loadイベントで、Tabcontrolの領域をTabControlのDisplayRectangleに設定します。

tabControl1.Region = new Region(tabControl1.DisplayRectangle);

それがうまくいけば、'UserControlsまたは'Panelsを移動する手間を大幅に省くことができ、デザイン時にTabPageをビジュアルモードでデザインしてから、TabPageからTabPageへのナビゲーションを最適な方法で制御できます。 。

タブをビューに復元したい場合は、Form'LoadイベントでTabControlの元の領域を「スナップショット」することをお勧めします。

これを行う1つの方法の簡単な例を次に示します。一種の「一方向」の開始から終了までのモデル:

各キーがTabPageであるディクショナリを定義し、各キーエントリのブール値は、ユーザーがそのTabPageに移動できるようにするかどうかを制御します。

// allocate the Dictionary
Dictionary<TabPage, bool> CanNavigateDict = new Dictionary<TabPage, bool>();

「FormLoadイベントで次のようにして、その辞書を準備します。

foreach (TabPage theTPage in tabControl1.TabPages)
{
    CanNavigateDict.Add(theTPage, false); 
}

// show the first TabPage
tabControl1.SelectedTab = tabPage1;

このモデルのナビゲーションコントロールは、次のTabPageのブール値を'trueに設定する必要があることを意味します。これは、どのような方法でも、現在のページを完了するための基準を満たした場合です。サンプル

// sample of how you control navigation in the TabControl
// by using the CanNavigate Dictionary in the TabControl 'Selecting event
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
  e.Cancel = ! CanNavigateDict[e.TabPage];
}
于 2010-03-12T16:14:35.923 に答える
3

これには DI/IoC コンテナーを使用する傾向があります (具体的には、これを使用しますが、ほとんどすべてが機能するはずです)。

アプリの「ホスト」である MainForm を作成します。その MainForm には、ユーザーがどのようにナビゲートできるようにするかに応じて、DeckWorkspace または TabWorkspace のいずれかを配置します。前方/後方のみを許可したい場合は、デッキワークスペースを使用します. 複数のステップにジャンプできる場合は、TabWorkspace の方が適切でしょう。

次に、ナビゲーション ボタンとなるいくつかのボタンを MainForm に追加します。

次に、ウィザード ページごとに SmartPart (ビュー) を作成します。内部ではこれらは UserControls ですが、Wor4kspaces が使用方法を知っているものです。

次に、ナビゲーションに有効なもの、進む/戻るために表示される SmartParts などのステート マシンを持つ WizardService を作成します。

次に、SmartPart ごとにプレゼンターを作成して、View を WizardService に接続するか、全体で 1 つのプレゼンターに接続します。これは、ウィザード データの複雑さと、ステップ間のデータの関係に大きく依存します。

次に、ナビゲーション ボタンのイベントを接続します。これらのイベントは WizardService に送られ、どこに移動してプレゼンターに連絡する必要があるかを判断し、プレゼンターが適切なビューを表示して入力します。

編集

WinMo/WEH 上で動作するウィザードの確かな実例をまとめました。まったく同じコードが、Windows CE やデスクトップでも問題なく動作します。 ちょっとした説明については私のブログを参照するか、Codeplex プロジェクトのチェンジセットからコードを引き出してください。

于 2011-08-24T14:40:02.573 に答える