web-dev-qa-db-ja.com

C#でのWindowsフォーム用のウィザードの作成

C#.NetでのWindowsフォームアプリケーションのウィザードの作成は初めてです。だから私はウィザードの作成について何も考えていません。マルチウィザードの作成に関するアイデアを教えてください。

よろしく、ラビ

33
Ravi

それを行う方法はたくさんあります。ウィザードの各ステップのフォームを作成することは可能ですが、非常に面倒です。そして醜い、ユーザーがステップを変更するとちらつきがたくさん。各ステップをUserControlが機能するようにするには、フォームのControlsコレクションの内外を切り替えるだけです。または、ステップごとにそれらの1つをVisible = trueにします。 UCの設計は複雑になる傾向がありますが、UIアイテムごとにパブリックプロパティを追加する必要があります。

簡単で、RADの方法は、TabControlを使用する方法です。デザイン時にタブを切り替えて、各タブにコントロールをドロップできるため、デザイナーで非常にうまく機能します。切り替え手順は簡単です。変更するだけです。 SelectedIndexプロパティです。重要なのは、実行時にタブを非表示にすることだけです。Windowsメッセージを処理することで簡単に実行できます。新しいクラスをフォームに追加して、以下に示すコードを貼り付けます。コンパイルします。新しいコントロールをツールボックスの上部をフォームに追加します。

using System;
using System.Windows.Forms;

class WizardPages : TabControl {
  protected override void WndProc(ref Message m) {
    // Hide tabs by trapping the TCM_ADJUSTRECT message
    if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1;
    else base.WndProc(ref m);
  }
}
132
Hans Passant
class WizardPages : TabControl
{
    protected override void WndProc(ref Message m)
    {
        // Hide tabs by trapping the TCM_ADJUSTRECT message
        if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1;
        else base.WndProc(ref m);
    }        

    protected override void OnKeyDown(KeyEventArgs ke)
    {
        // Block Ctrl+Tab and Ctrl+Shift+Tab hotkeys
        if (ke.Control && ke.KeyCode == Keys.Tab) 
            return;
        base.OnKeyDown(ke);
    }
}
29
Cluster

自分の好みに合わせて自分で作成する必要があります。ヒントは、「frmWizard」のような名前の基本フォームを作成することです。そうすると、すべてのウィザードウィンドウがそのフォームから継承されます。共通オブジェクトまたはウィザードオブジェクトを基本クラスに配置し、必要に応じて\変更して派生クラスでオーバーライドする必要があります。

1
Jojo Sardez