私は通常 a を使用し TabControl
、どういうわけかタブを非表示にしてナビゲートします。
これを行う他の方法に興味があります!!!
プロパティが に設定されてPanel
いる最初のパネルを除くすべてのオブジェクトのコレクションを使用できます。Visible
false
現在のパネルのインデックスを保存し、このインデックスを適切に変更する「次へ」および「前へ」ボタンを用意します。このインデックスが変更されたら、必要に応じて適切なパネルを表示/非表示にします (特定の時点で現在のパネルのみを表示する必要があります)。
一部またはすべてのパネルでイベントを処理してIsVisibleChanged
、ユーザーが特定のパネルに移動したときに特定の動作をトリガーすることもできます。
これはかなり複雑なトピックです。私は約 2 年前に社内で使用するためにかなり包括的なウィザード コントロールを作成しましたが、正確に機能するようになるまでに数週間かかったのを覚えています。
基本的な要素は次のとおりです。
コンテンツ パネルとアクション パネルの両方で を使用しParentControlDesigner
て、ドロップ コントロールを有効にします。コンテンツ パネルでは、直接ドロップすることはできません。代わりに、アクティブなページ (サブパネル) にドロップできます。アクション パネルには、標準の 4 つのボタン (前、次、キャンセル、終了) を作成する「デフォルト」モードもあります。私は主にカスタム モードを実装して、標準の Winforms ボタンの代わりに DevEx ボタンを使用してスキンを適用できるようにしました。
ヘッダーは基本的に静的でPictureBox
、Label
画像、テキスト、およびフォントをカスタマイズできます。(デフォルトでは、テキストはページ タイトルと同じで、フォントはボールド スタイルが追加されたコントロールのフォントです)。
次に、API によって公開される一連のデータ構造があります。
ステップ用のカスタム コレクション エディターをまとめました。これにより、上記で説明したように、コンテンツ パネルのサブパネルが作成されます。各パネルはコントロール コレクションに直接追加されますが、アクティブなステップ プロパティに基づいて一度に表示されるのは 1 つだけです。ドッキングがまったく正しく機能していないように見えたので、すべてのサイズ変更メソッドをオーバーライドする必要があったことを覚えています。ページ間を簡単に切り替えるためのスマート タグを作成したことはありませんが、プロパティ グリッドでアクティブなページ (またはページ インデックス) を選択できます。
次に、個々のページにカスタム ロジックを挿入するためのフックを多数含める必要がありました。すべてのコードを投稿せずに、ここで詳細を説明するのは困難です。
適切に設計してテストするにはかなり時間がかかりますが、奇抜な設計トリックを使用したことを覚えていません。前述のように、個々の UI 要素 (実行時と設計時の両方) の観点から問題に系統的にアプローチする必要がありました。データ構造とそれらがどのように相互作用するか。
これはすべて、再利用可能なウィザード コンポーネントを作成するためのものであることを覚えておいてください。これは、特定のアプリ用に約 10 個のウィザード コンポーネントを開発する必要があったためです (他のプロジェクトにも役立ちます)。1 つの簡単なウィザードを一緒にハックする必要がある場合、おそらくこのすべての問題を経験することはなく、タブ コントロールといくつかのフロー パネルを使用して、あなたがしていることを実行するだけです。または、DX ライブラリなど、多くの Winforms ライブラリで現在利用できるように、既製のウィザード コントロールを使用することをお勧めします。