2016-08-08 11 views
0

私は、ユーザが表示されている複数のページを持つウィザードをまとめています。前のページでユーザーの選択肢からデータにアクセスできるようにするには、1つのページが必要です。私の考えは、両方のページのコンストラクタに参照渡しのパラメータを渡し、そのパラメータにプロパティを割り当てますが、変更はページ間で持続しません。私はそれが私が誤ってrefを使用していることを意味していると仮定しています。 ウィザードホストによって制御されるため、メソッド自体に直接データを渡すことはできません。パラメータに割り当てられたプロパティの参照を保持する

ホストの初期化:refはプロパティとリンクされている

WizardHost host = new WizardHost(); 
    using (host) 
    { 
     host.Text = Migration.Properties.Resources.AppName; 
     host.ShowFirstButton = false; 
     host.ShowLastButton = false; 
     host.WizardCompleted += new WizardHost.WizardCompletedEventHandler(this.Host_WizardCompleted); 

     Reference<DBManip> dbControllerRef = new Reference<DBManip>(); 
     bool exportPathActive = false; 

     host.WizardPages.Add(1, new Page1()); 
     host.WizardPages.Add(2, new Page2(dbControllerRef)); 
     host.WizardPages.Add(3, new Page3(dbControllerRef, ref exportPathActive)); 
     host.WizardPages.Add(4, new Page4(dbControllerRef, ref exportPathActive)); 
     host.WizardPages.Add(5, new Page5()); 
     host.LoadWizard(); 
     host.ShowDialog(); 

ページ:

public Page3(Reference<DBManip> dbControllerRef, ref bool exportPathActive) 
    { 
     this.InitializeComponent(); 

     this.DBControllerRef = dbControllerRef; 
     this.Page3Body.Text = Migration.Properties.Resources.Page3Body; 
     this.ExportPathActiveRef = exportPathActive; 
    } 

    public Reference<DBManip> DBControllerRef 
    { 
     get; 
     private set; 
    } 

私は変更は、次のページに保存されたコンストラクタでexportPathActiveを変更する場合は、しかし、であるプロパティ渡されたパラメータに割り当てられても、参照は保持されません。私はC#の新機能ですから、これはおそらく愚かなものですが、Googleで見つけたり、SOの周りを見たりすることはできません。

+0

あなたはセッション変数に情報を格納することができるかもしれません。 –

+0

質問は 'winforms'とタグ付けされているので、' page'という単語はやや誤解を招きます。 –

+0

@ScottHannenワードページはどのように誤解を招きますか?これらは、winformsプロジェクト内のウィザードのページです。 –

答えて

0

私はExportPathActiveというプロパティを持つPersistentDataというクラスを作成し、それを渡すことに決めました。それはうまく動作し、必要に応じてさらにデータを保持するように拡張することができます。より洗練されたアプローチが掲​​載されている場合には、これを承認するのを待つつもりです。

クラス:

/// <summary> 
/// A store to pass data between pages. 
/// </summary> 
public class PersistentData 
{ 
    /// <summary> 
    /// Initializes a new instance of the <see cref="PersistentData"/> class. 
    /// </summary> 
    public PersistentData() 
    { 
     this.ExportPathActive = false; 
    } 

    /// <summary> 
    /// Gets or sets a value indicating whether [export path active]. 
    /// </summary> 
    /// <value> 
    /// <c>true</c> if [export path active]; otherwise, <c>false</c>. 
    /// </value> 
    public bool ExportPathActive { get; set; } 
} 
関連する問題