2016-07-13 8 views
-4

私はプロジェクトの途中で、あるフォームから別のフォームにブールを渡そうとしていますが、いつでも実行できません。 1ブールをあるフォームから別のフォームに渡す(機能しない)

public bool test = false; 
private void bluelineToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    this.BackgroundImage = Properties.Resources.Background_Mainframe_Blueline; 
    test = true; 
} 

形態2

private void AboutWindow_Load(object sender, EventArgs e) 
{ 
    Mainframe main = new Mainframe(); 

    if (main.test == true) //reads test as false rather then true. 
    { 
     this.BackgroundImage = Properties.Resources.Background_About_Blueline; 
    } 
} 

フォームはそれが真としてブールを読み取るために第2のフォーム負荷である場合、それは偽として読み出します。

私はブールを間違って読んでいますか?

助けてもらえますか?

+0

フォームがロードされたとき、それは本当でしたか?フォームがロードされた後にボタンが押された場合にのみ、テストをtrueに設定するようです。 また、それはその仕組みではありません。 Form2がForm1に含まれている場合、C#の他のオブジェクトと同様にForm1の存在を認識しません。最初のフォームからデータを取得するために2番目のフォームが本当に必要な場合は、Form2でデータを変更するForm1呼び出しメソッドをForm2に持たせることができます。 – Ares

+1

これは、既に作成したメインフォームを参照するのではなく、変数をデフォルト値に戻す新しいメインフォームを作成するためです。新しいクラスファイルを作成し、その新しいクラスにbool変数を置き、両方の形式で使用します。 – sous2817

+0

Aboutウィンドウが新しいメインフレームを作成するのはなぜですか?私はあなたがアクセスするオブジェクトを持っていると思っていますが、現実には、既存のMainframeのインスタンスにアクセスする必要があります。 –

答えて

1

はい。それは本当です。 Form2が読み込まれると、mainフォームが初期化されます。初期化でmain.testFalseです。 をTrueに設定するには、をmainの形式でクリックする必要があります。しかし、if条件はmainフォームの初期化直後にチェックします。

1

子フォームを作成するときに親フォームへの参照を渡し、子フォーム内で新しいインスタンスをインスタンス化する必要はありません。

1

これは、Variables.csという新しいパブリッククラスを作成し、変数をクラスに追加して他のクラスで呼び出すことで解決しました。

例:

Variables.cs

public class Variables 
{ 
    public static bool test = false; 
} 

をForm1

private void bluelineToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    Variables.test = true; 
} 
関連する問題