2016-07-16 1 views
0

私は一度にアクティブにしたい3つのフォームを持っています。
最初のフォームは、他の2つを起動するために使用されるメインウィンドウです。私が直面している問題は、データ転送です。これは、.ShowDialog();を使用してデータを起動して転送するときに機能します。
しかし私はフォームがそのウィンドウへのアクセスをロックしないようにしたい。フォーム.Show();を使用すると、デフォルトの "0"としてデータが転送されます。とにかくこれの周りにはありますか?
ユーティリティウィンドウなど、同じ結果を得るためのより良い方法はありますか?
私の最終目標は、最初のフォームに変数を格納する別々のアクティブなウィンドウを持つことです。マルチフォームの問題

public partial class CH_Info : Form 
{ 
    private Ch_Creation MyChcreation; 

    public CH_Info() 
    { 
     InitializeComponent(); 
     MyChcreation = new Ch_Creation(); 
    } 
    private void UpdateBtn_Click(object sender, EventArgs e) 
    { 
     //this grabs the text from the CH_Creation's STR,DEX,CON,INT,WIS,CHA Total Label 
     StrResLbl.Text = MyChcreation.StrTotalLbl.Text; 
     DexResLbl.Text = MyChcreation.DexTotalLbl.Text; 
     ConResLbl.Text = MyChcreation.ConTotalLbl.Text; 
     WisResLbl.Text = MyChcreation.WisTotalLbl.Text; 
     IntResLbl.Text = MyChcreation.IntTotalLbl.Text; 
     ChaResLbl.Text = MyChcreation.ChaTotalLbl.Text; 
    } 

This is using CH_Info MyChInfo = new CH_Info(); MyChInfo.Visible = true;this is using .ShowDialog();(ダイアログボックスが閉じられている場合、それが動作する唯一の方法がある)

目標は、他の二つの形式が、私は外に出て、再できるユーティリティウィンドウとして機能させることですプログラムが終了するまでデータを保持したままオープンします。
現在、にデータを返すのはform3のみです。しかし、最初のフォームに変数を格納することが分かっていれば、私は自分が望むものを達成することができます。私はそれらを再度開いたときにもう一方のフォームにデータを戻すことです。しかし明らかにするために、私の現在の問題は、すべての3つのフォームを使用せずにアクティブに保つことです.ShowDialog();と私は前に言ったように、私は使用しないで細かい長い間に転送することができます.Show();

ありがとう助けてくれています。

+1

あなたはクラスのインスタンスであるかを理解する必要があります。また、複数のインスタンスが存在する可能性があり、1つのインスタンスのデータが別のインスタンスの同じデータではない理由。 _MyChcreation = new Ch_Creation();を記述すると、Ch_Creationクラスの新しいインスタンスが作成されます。既に表示されているフォームと同じインスタンスではありません – Steve

+0

同じインスタンスを作成する別の方法はありますか? – AnimalChubs

+0

あなたのアプリには常にCH_Creationタイプのフォームが1つしかありません。 – Steve

答えて

1

Ch_Creation型のフォームが常に1つしかない場合は、開いているフォームCh_CreationのApplication.OpenFormsコレクションを検索し、その中のWinformsエンジンによって格納されているインスタンスを使用するのは簡単ですコレクション念の対策として

public CH_Info() 
{ 
    InitializeComponent(); 
    MyChcreation = Application.OpenForms.OfType<Ch_Creation>().FirstOrDefault(); 
} 
private void UpdateBtn_Click(object sender, EventArgs e) 
{ 
    if(MyChcreation != null) 
    { 
     StrResLbl.Text = MyChcreation.StrTotalLbl.Text; 
     DexResLbl.Text = MyChcreation.DexTotalLbl.Text; 
     ConResLbl.Text = MyChcreation.ConTotalLbl.Text; 
     WisResLbl.Text = MyChcreation.WisTotalLbl.Text; 
     IntResLbl.Text = MyChcreation.IntTotalLbl.Text; 
     ChaResLbl.Text = MyChcreation.ChaTotalLbl.Text; 
    } 
    else 
    { 
     StrResLbl.Text = ""; 
     DexResLbl.Text = ""; 
     ConResLbl.Text = ""; 
     WisResLbl.Text = ""; 
     IntResLbl.Text = ""; 
     ChaResLbl.Text = ""; 
    } 
} 

必ず確認してください(MyChcreationのような)参照変数は、そのメンバーを使用しようとする前にヌルです...

+0

これは私の問題に答えるようです。私が実行している唯一のことは、thatCh_CreationはCHのIinfoの前に開いていなければなりません。それ以外の場合は、データを取得しません。 – AnimalChubs

関連する問題