2016-07-19 10 views
-1

もう一度、すべてのフォームを更新しようとしています。私の最初のフォームでは、別のフォームform2を開く "作成"ボタンを押します。この2番目のフォームには入力フィールドがあり、最初のフォームにコンボボックスを入力する値を入力できます。 2番目のフォームには、「更新」ボタンがあります。最初に更新を押すと、拳のフォームを更新したいと思います。2回目に編集した後にフォームをリフレッシュしてください。

私はthis.refresh();があることを知っていますが、これが私にとって有用かどうかはわかりません。私はまだC#にはかなり新しいですし、一緒に2つの形態を相互に作用することはかなり複雑な概念である

Private void Form2UpdateButton_Click 
{ 
    //do update stuff 
    Form1_load.Refresh(); 
} 

または多分

private void Form2UpdateButton_Click 
    { 
    //do update stuff 
    Form1.close(); 
    Form1.Open(); 
    } 

- Form2をオン

:私はの線に沿って何かをしようとしています私には間違った方法をしているかどうか知らせてください。リフレッシュは間違った場所にあるかもしれませんが、これが私が望むものだと思います。

+0

特定のイベントを監視するために、form1にリスナーを書き込むことができます。 – Adam

+0

あなたはリスナーが – asdfsa

+0

であることを詳細に教えてください。そのリスナーは、フォーム2で更新ボタンが押されているのを見て、フォーム1のthis.refeshを行うことができますか?しかし、フォーム1は、更新ボタンがフォーム2上にのみ存在すると、どのように更新ボタンを見るでしょうか? – asdfsa

答えて

0

ボタンがクリックされたときにトリガされる独自のイベントをform2に作成します。あなたはただform2.OnUpdateClicked += yourMethodすることができますこのように。

public partial class Form1 : Form 
{ 
    private void CreateForm2() 
    { 
     Form2 frm2 = new Form2(); 
     // Hook the event of form2 to a method 
     frm2.PropertyUpdated += Form2Updated; 
    } 

    private void Form2Updated(object sender, EventArgs e) 
    { 
     // this will be fired 
    } 
} 

public partial class Form2 : Form 
{ 
    // On form2 create an event 
    public event EventHandler PropertyUpdated; 

    private void Form2UpdateButton_Click() 
    { 
     // If not null (e.g. it is hooked somewhere -> raise the event 
     if(PropertyUpdated != null) 
      PropertyUpdated(this, null); 
    } 
} 
0

勧告:

あなたの二番目の形式は、最初の1を参照して作成する必要があり、すなわち、

をForm1:

public void RefreshParameters() 
{ 
    // ... do your update magic here 
} 

private void openForm2(..) 
{ 
    // Pass your current form instance (this) to new form2 
    var aForm = new Form2(this); 
    aForm.Show(); // show, run, I don't remember... you have it 
} 

のForm2:

// Here you will store a reference to your form1 
form1 daddy = null; 

// A new constructor overloading default one to pass form1 
public Fomr2(Form1 frm):base() 
{ 
    daddy = frm; // Here you store a reference to form1! 
} 

public void UpdateDaddy() 
{ 
    // And here you can call any public function on form1! 
    frm.RefreshParameters(); 
} 
このような
0

片道このように、フォーム2のForm1の参照を渡すことである:上記の技術は、「プロパティインジェクション」

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void buttonLaunchForm_Click(object sender, EventArgs e) 
    { 
     Form2 form2 = new Form2(); 
     form2.LauncherForm = this; 

     form2.Show(); 
    } 

    public void RefreshFormData() 
    { 
     // Refresh 
    } 
} 

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public Form1 LauncherForm { set; get; } 

    private void buttonUpdate_Click(object sender, EventArgs e) 
    { 
     // do your normal work then: 

     LauncherForm.RefreshFormData(); 
    } 
} 

と呼ばれます。

+0

フォーム1のこのメソッドは、フォーム1に次のような理由で更新ボタンを作成する必要があります。private void buttonUpdate_Click(オブジェクト送信者、EventArgs e) { Form1.RefreshFormData(); }可能であれば – asdfsa

+0

私はform1に更新ボタンを作成したくありません。 form2の更新ボタンがform1_Loadをトリガーするようにしたい – asdfsa

+0

@asdfsa申し訳ありません。編集されました。 – user3185569

関連する問題