2012-01-22 10 views
1

私はWinフォームアプリケーション(VS 2010/C#)を持っており、リフレッシュボタンなしでページをリフレッシュする方法を理解しようとしています。別のフォームページからフォームページを更新する方法はありますか?

this.Hide(); 
AccountSettings AS = new AccountSettings(); 
AS.ShowDialog(); 

私が持っている例:現在、私はこの(this.refresh()何らかの理由で動作していないようです)のようなコードに何かを含むリフレッシュボタンで(基本的にはデータバインディングをリセットする)ページを更新することができますCellClickイベントを含むデータグリッドを含む多数の設定を持つページです。セルをクリックすると、データベースに変更を加えることができます。私は近くで設定ページに戻りますが、私が変更を見るための唯一の方法は、ボタンを使ってページをリフレッシュ()することです。

それでは、フォームページを別のフォームページからリフレッシュする方法はありますか? たとえば、[保存]ボタンをクリックするか、子ウィンドウを閉じます。

+0

あなたはバインディングソースを更新する必要があります。グリッドはそれ自体から更新されます。 –

答えて

0

winformでのリフレッシュコントロールは、コントロール自体を再描画します。適切なデータをコントロールにロードし、必要に応じて呼び出すメソッドを作成すると便利です。 (フォームの負荷を含む)

private void ResetData() 
    { 
     //code to update settings 
    } 

ダイアログとして閉じているフォームを表示している場合も、あなたはその利点を取る、とだけではなく、それを開くのダイアログの状態を確認することができます。

Form2 dlg = new Form2(); 
if (dlg.ShowDialog == System.Windows.Forms.DialogResult.OK) { 
    //code that updates your data 
    ResetData(); 
} 

ダイアログにはいくつかのことがあり、アプリケーションのしくみがあれば、他の方法よりも優れた方法があります。これは単なる一例です。

変更がある場合は、更新するために他のウィンドウのデータにアクセスする必要はありません。作成したフォームのクローズイベントを処理できます。

あなたはまた、あなたが作成したイベントハンドラを削除することができるように、開かれた形を保持するために、クラスレベルの変数を作成します。フォームのインスタンスを作成し、近くにイベントハンドラを追加するには

private Form2 frm; 

を:

frm = new Form2(); 
    frm.FormClosed += OnForm2Closed; 

イベントハンドラメソッド:

private void OnForm2Closed(object sender, FormClosedEventArgs e) 
{ 
    ResetData(); 
    frm.FormClosed -= OnForm2Closed; 
} 
2

たぶんORIGを渡します第二の形式の引数としてinal形式:

Form2 frm2 = new Form2(this); 

とのForm2で:

Form1 frm1; 
public Form2(Form1 frm1) 
{ 
    InitializeComponent(); 
    this.frm1 = frm1; 
} 

そしてForm2の中に持っているが:

frm1.Update(); 
関連する問題