2016-07-21 6 views
0

ほとんどのUI要素を含むメインのWinFormを実行していて、[追加]ボタンを選択するとAddフォームが呼び出されます。それは入力を受け取り、受け入れられたらそれをWinFormに送り返すべきです。クロスクラス通信

このコードは、メインクラス上の「追加」ボタンをクリックしたときに実行されます。

public void addButton_Click(object sender, EventArgs e) 
    { 
     AddView newadd = new AddView(); 
     newadd.Show(); 
    } 

(メインクラス)このコードAddViewでボタンに基づいて実行する必要があります:

public void AddDashObject(string dashName, string dashIdentifier, int dashFunction, string dashFunctionInfo, int dashVerbosity) 
    { 
     DashObject tmp = new DashObject("","",0,"",0); 
     tmp.DashName = dashName; 
     tmp.DashIdentifier = dashIdentifier; 
     tmp.DashFunction = dashFunction; 
     tmp.DashFunctionInfo = dashFunctionInfo; 
     tmp.DashVerbosity = dashVerbosity; 
     dashloaded.Add(tmp); 
     ReloadDashObjects(); 
    } 

私はフォーム間のやりとりの仕方がわかりません - メインクラスで作成されたタイプとメソッドを使用できますが、別のインスタンスを作成していると思います。既存のものとどのように通信できますか?

MainView mnfrm = new MainView(); 
    MainView.DashObject tmp = new MainView.DashObject("","",0,"",1); // Defaults 

    private void button1_Click(object sender, EventArgs e) 
    { 
     mnfrm.dashloaded.Add(tmp); // Add the default DashObject to MainView's currently loaded DashObjects 
     mnfrm.ReloadDashObjects(); // Reload the list 
    } 

これをどのように進めるのか分かりません。

+1

Addフォームはモーダルであると想定されているため、ユーザーがAddフォームに入力したときにメインフォームが「ロック」されるか、またはパラレルで動作するのでしょうか? –

+0

MainFormからAddFormへの参照を送信し、そこでMainFormの参照を使用します。 –

+0

@MattiasÅslund - ちょうど非モーダル関数の私の偶然の使用に気づいた。それはモーダルでなければなりません(また、ShowDialogを使用します) – Quartzic

答えて

0

追加ダイアログはモーダルであると予想されるため、これを行う分離された方法は、ダイアログをOKステータスで閉じることです。私。フォームは実際には何もしない入力コントロールにすぎません。

そして、メインフォームすることができます:

1)ダイアログが右にShowDialog()の後に閉鎖されたか確認し、

2)を配置する前に、追加のフォームから値を取得するには、いくつかのgetResult()関数を呼び出しますそれ。

3)実際にDashObjectを作成して再ロードするビジネスロジックを呼び出します。