2012-05-09 13 views
0

私は8つのフォームを持つ非常に複雑なウィンドウアプリケーションを持っています。各フォームには「前」ボタンと「次へ」ボタンがあり、簡単にフォームを編集することができます。Windowsフォームで変数を渡す

private void ShowNext() 
    { 
     if (FormNext == null) 
      FormNext = new SomeForm(this); 
     FormNext.Show(); 
     this.Hide(); 
    } 

    private void ShowPrev() 
    { 
     FormPrev.Show(); 
     this.Hide(); 
    } 

    private void btnNext_Click(object sender, EventArgs e) 
    { 
     ShowNext(); 
    } 

    private void btnBack_Click(object sender, EventArgs e) 
    { 
     ShowPrev(); 
    } 

各フォームは、異なるSQL INSERT TABLEコマンドを実行します。しかし、問題は、私は各フォームにすべての挿入を終わらせたくないということです。

ユーザーが正しい入力値を確認すると、最後のフォームですべてを終了します。 つまり、すべての変数を最初から最後の変数に渡す必要があります。

質問:メモリはすべての変数を保持できますか?それらをクロスフォームに渡すには?

ありがとうございました。

+4

8は以下のようなあなたの新しい/古いフォームのパブリック変数に簡単に文字列のクエリを渡すことができますが、非常に複雑な音ではありません。 – Oded

答えて

1

メインフォームに静的パブリックフィールドを定義し、各サブフォームの値を更新します。最後に次の行に挿入するためにあなたの最後のフォームのフィールドを選択し

何か:

public partial class Form1 : Form //your main fomr 
    { 
     public static List<MyContainerClass> myContainer= new List<MyContainerClass>(); 
     ............. 
ここ

MyContainerClassは、あなたが持続したいすべての値を保持することができ、あなたのコードで定義されたいくつかのクラスである可能性があります。その文字列の場合は、文字列のリストを作成することができます。そして、あなたはちょうどあなたが必要とするデータへのアクセス権を持っているいくつかのコンテキストへの参照を保持するために必要な値

foreach(MyContainerClass mc in Form1.myContainer) 
{ 
//Do your work 
} 
0

すべての変数を保持するスタティックシングルトンクラスを作成します。

0

にアクセスすることができ、最後の形式では

Form1.myContainer.Add(new_values); 

各フォームの設定値インチ

protected void btnNext_Click(object sender, EventArgs e) 
{ 
    SomeContext.Push(myFormStateDataThatIsReady); 
    ShowNext(); 
} 

最後に、このステップを終了すると、このデータをそのコンテキストからプルして、そのデータを書き込むことができます。

+0

それは面白いです。しかし、私はWindowsのフォームのプッシュメソッドは何か分からないのですか? –

+0

これは存在しない 'SomeContext'クラスのメソッドです。上記のコードはほんの一例です。フォームにアクセスするには、ある種のストレージメカニズムを実装する必要があります。 – Tejs

1

あなたは

protected void btnNext_Click(object sender, EventArgs e) 
{ 
    MyForm2 x = new MyForm2(); 
    x.Query = "My Query"; // here "Query" is your custom public string variable on form2 
    x.Show() 
} 
関連する問題