2011-10-17 11 views
1

私は2つのフォームform1とform2を持っています。私は以下のスニペットを使用してForm1のからのForm2を呼び出す:別のフォームからフォームをリフレッシュするには?

Application.run(new Form2()); 

Form2 f2=new Form2(); 

f2.show(); 

このコードは絶対に正常に動作していると私はForm1のからForm2の負荷を見ることができました。

今私はこれを5回繰り返す必要があります。私は最初にそれを実行すると、新しい趣味が作成されなければならない(つまり、上記のコードが実行されなければならない)が、2/3または4回実行すると、新しいform2を作成するのではなく、上記のコードを5回実行すると、form2の5つの新しいインスタンスが作成されます。代わりに、form2は一度だけ表示されなければなりませんが、最初のフォーム以外のanytimeを呼び出すと、それはリフレッシュする必要があります。あなたはこれにいくつかの光を投げてくださいできますか?

答えて

4

。上記のコードを5回実行すると、form2の5つの新しいインスタンスが になります。代わりに、form2は1回だけ表示されなければなりませんが、最初のフォーム以外のanytimeを呼び出すと、 が更新されなければなりません。

Form2 f2=new Form2(); 

は、この新しいフォームを作成します。あなたはそれを5回作成するため

これ

です。 5回呼び出すと、フォームのインスタンスが5つ作成されます。

データを更新する場合は、パブリックメソッド "Refresh()"を作成して呼び出す必要があります。例:

このようにして、バインディングをやり直すことも、永続性をリフレッシュするデータを再設定することもできます。

4

あなたはこのように試すことができます....

これはMediatorパターンの唯一の初歩的な実装であることに注意してください。どんなことが起こっているのかをより良く理解するためには、そのパターンとデザインパターン全般を読むことを強くお勧めします。

これもまたサンプルですが、いくつかの基本的なエラーチェックが行われています。

public partial class MainForm : Form 
{ 
    private FormMediator _formMediator; 

    public MainForm() 
    { 
     InitializeComponent(); 
    } 

    public void SomeMethodThatOpensTheSubForm() 
    { 
     SubForm subForm = new SubForm(); 

     _formMediator = new FormMediator(this, subForm); 

     subForm.Show(this); 
    } 
} 

をメディエータの変更の実装は次のようになります:

フォームの宣言はこのような何かを見に行くされて

public class FormMediator 
{ 
    private Form _subForm; 
    private Form _mainForm; 

    public FormMediator(Form mainForm, Form subForm) 
    { 
     if (mainForm == null) 
      throw new ArgumentNullException("mainForm"); 

     if (subForm == null) 
      throw new ArgumentNullException("subForm"); 

     _mainForm = mainForm; 
     _subForm = subForm; 

     _subForm.FormClosed += MainForm_FormClosed; 
    } 

    void MainForm_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     try 
     { 
      _mainForm.Refresh(); 
     } 
     catch(NullReferenceException ex) 
     { 
      throw new InvalidOperationException("Unable to close the Main Form because the FormMediator no longer has a reference to it.", ex); 
     } 
    } 
} 

私は願っていますが、それはあなたを助けます....

関連する問題