2016-07-30 4 views
-1

私は2つの勝利フォームf1とf2を持っています。 f1、f1 hide、f2 showでデータグリッドビューの行ヘッダーをクリックすると、データがf1からf2に渡されます。ユーザーがf2を操作して「閉じる」をクリックすると、f2 hideとf1が表示されます。私はf1の機能を作成して、ユーザーがデータベースに対して行った変更をキャッチします。問題は、f2 hideとf1が表示されているときにボタンを使用する代わりに、この関数を自動的に呼び出す方法です。ありがとう。フォームが再び現れたときに関数を自動実行するC#

答えて

-1

Shownという名前のフォームのイベントにイベントがあります。これは、フォームが再び表示されるたびに実行されます。

こちらがお役に立てば幸いです。

編集:

代わりにこれを試してみてください:

this.Hide(); 
f2.ShowDialog(); 

MethodUpdateValues(); 
this.Show(); 

をこの2行目で一時停止し、F2キーを閉じたときに継続します。

+0

ありがとうございました。私は、Shownイベントでテストしました。 f1が最初に現れたときに、Shownイベントが発生し、f1が再び現れ、f2が隠れたとき、Shownは再び発火しなかった。私が望むのは、この時点で機能が引き起こされることです。 – Viviannne

+0

@Viviannne私は新しいアプローチをとった。これは使えますか? – MasterXD

+0

ありがとう、私はあなたの更新を見た。私はSteveのソリューションでテストしましたが、うまくいきました。 – Viviannne

0

問題は、私が代わりにフォームのコンストラクタでその関数を呼び出すか、FormLoadイベントを処理し、イベントハンドラで、その関数を呼び出して、その後まあ ボタン

を使用するのでは自動的にこの関数を呼び出すことができる方法です。

+0

-1の理由はありませんが、これは正解です –

+0

ありがとうございます。 f1が最初に現れたときにロードイベントが発生し、ロードイベントが隠れて再び表示された後、再び起動されましたか?私はそうは思わない。おそらく他にもいくつかの出来事があります。 – Viviannne

1

Form1(f1)を非表示にする前とForm2(f2)を作成した後でf2に渡すと、閉じるときにf2によって呼び出されるアクションデリゲートが生成されます。このデリゲートメソッドは、クラスのForm1の内側になり、あなたはForm2のインスタンスはアクションデリゲート

Form2 f2 = new Form2(); 
f2.ReactivateParent += ReactivateMe; 
this.Hide 
f2.Show(); 
... 

を結合して、Form1にメソッドを追加表示するために準備するときは、Form1に今の隠しインスタンスに

public class Form2: Form 
{ 
    public Action ReactivateParent; 

    .... form2 methods .... 

    // Here I call the ReactivateParent inside the FormClosed event handler 
    // of Form2, but these lines can also in a button click event 
    // that terminates the Form2 instance.... 
    protected void Form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     if(ReactivateParent != null) 
      ReactivateParent(); 
    } 
} 

を再活性化しますReactivateMe

private void ReactivateMe() 
{ 
    // Add here whatever you need to update your Form1 instance.... 
    .... 
    // Reshow the now updated Form1 instance... 
    this.Show(); 

} 

という名前のこのアプローチの利点は、Form2のはReactivateParentとすべての他の形で行われているかについて心配していないという事実でありますアプリケーションでは、Form2の機能を再利用し、Form2インスタンスが終了したときに通知されます。

さらにこのパターンを改善するには、変更されたデータでForm2インスタンスによって埋められるカスタムクラスのインスタンスを受け取るようにアクションデリゲートを変更することも考えられます。これにより、Form1インスタンスを更新するためのデータベースへの呼び出しを回避できます。

+0

入手しました。テストしますが、これはうまくいくと思います。 – Viviannne

+0

私が期待した通りに正確に働いています、スティーブに感謝します。 – Viviannne

+0

助けになるのはうれしいです。 – Steve

関連する問題