7


4

ウィザードを構築するための良いパターンですか?

私は通常「TabControl」を使用し、どういうわけかタブを非表示にしてそれらをナビゲートします。

私はこれを行う他の方法に興味があります!!!

2 Answer


5


http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.aspx [Panel]オブジェクトのコレクションを使用できます。最初のパネル以外はすべて` Visible`プロパティを持ちます「false」に設定します。

現在のパネルのインデックスを保存し、このインデックスを適切に変更する「次へ」および「前へ」ボタンがあります。 このインデックスが変更された場合、必要に応じて適切なパネルを表示/非表示にします(特定の時間に現在のパネルのみが表示されるようにします)。

一部またはすべてのパネルで `IsVisibleChanged`イベントを処理して、ユーザーが特定のパネルに移動したときに特定の動作が発生するようにすることもできます。


2


これはかなり複雑なトピックです。約2年前に社内で使用するためにかなり包括的なウィザードコントロールを構築しましたが、正確に機能するようになるまで数週間かかったことを覚えています。

基本的な要素は次のとおりです。

  • ヘッダーパネル

  • コンテンツパネル

  • アクションパネル

  • サイドバー

コンテンツパネルとアクションパネルは両方とも、 `ParentControlDesigner`を使用してコントロールのドロップを有効にします。 コンテンツパネルでは、その上に直接ドロップするのではなく、アクティブなページ(サブパネル)にドロップできます。 また、アクションパネルには「デフォルト」モードがあり、標準の4つのボタン(prev、next、cancel、finish)を作成します。 主にカスタムモードを実装したので、スキンを作成できました。 標準のWinformsボタンの代わりにDevExボタンを使用します。

ヘッダーは基本的に静的で、カスタマイズ可能な画像、テキスト、フォントを備えた PictureBox`と Label`です。 (既定では、テキストはページタイトルと同じで、フォントはコントロールのフォントに太字スタイルが追加されたものです)。

次に、APIによって公開される一連のデータ構造があります。

  • ステップ(名前、タイトルなども含む)は、それらが必要かどうかも指定します サイドバーでリンクされる)

  • ワークフロー(つまり、 選択に基づいて次に進む場所)

  • 検証イベント(同期および非同期の両方)

  • アクション(ページ変更、ボタンクリックなどの前後に実行される)

  • トランジション効果(私はこれらを楽しみのためにした、ユーザーはそれらを好む)

上記のように、コンテンツパネル用のサブパネルを作成するステップのカスタムコレクションエディターをまとめました。 各パネルはコントロールコレクションに直接追加されますが、アクティブなステッププロパティに基づいて一度に表示されるのは1つだけです。 ドッキングがまったくうまく機能しないように思えたので、すべてのサイズ変更メソッドをオーバーライドする必要があったことを覚えています。 スマートタグを作成してページ間を簡単に切り替えることはできませんでしたが、アクティブなページ(またはページインデックス)はプロパティグリッドで選択できます。

それから、個々のページにカスタムロジックを挿入するためのフック全体を含める必要がありました。 すべてのコードを投稿せずに、ここで詳細を詳しく説明するのは困難です。

適切に設計およびテストするのはかなり時間がかかりますが、ウィズバンデザイントリックを使用したことは覚えていません。前述のように、個々のUI要素(ランタイムとデザインタイムの両方)の観点から問題に系統的にアプローチしなければなりませんでしたデータ構造とそれらの相互作用。

これらはすべて、特定のアプリ用に約10個を開発する必要があったため、再利用可能なウィザードコンポーネントを作成するためのものでした(他のプロジェクトでも同様に便利です)。 1つのクイックウィザードを一緒にハックする必要がある場合は、おそらくこのようなトラブルをすべて経験することはないでしょう。あなたがしていることをやるだけです。タブコントロールといくつかのフローパネルを使用します。 または、DXライブラリなど、現在多くのWinformsライブラリで使用可能な既製のウィザードコントロールを使用することもできます。