2012-04-26 7 views
0

私のアプリケーションで2つのフォームを使用してAとBを言うことができます。Aを閉じるときにA elseのメソッドを破棄してbase.dispose()を呼び出す必要があります。 フォームBは、フォ​​ームB =新しいフォームによってローカルに宣言されたフォームであり、ShowDialogメソッドで表示されます。 フォームAでbase.dispose()を呼び出すと、フォームBも閉じます。しかし、私はフォームBを開いたままにする必要があります。助言がありますか ?.net base.dispose()は他のフォームも閉じています。

おかげで、 Abhinav

答えて

1

フォームAが、これは正常な動作であるB型を所有しているので。

ShowDialogがで意味がありませんモーダルダイアログを、意味Program.csにグローバルリソースとしてあなたのアプリにB型の宣言と作成を移動し、形態AからFormBのためにそのShow()メソッドを呼び出し

あなたが説明したシナリオ。本当にそれが必要な場合は、グローバルオーナーを割り当てて、それをShowDialog(owner)

BTWで使用してください。その周囲にUIベースのウォッチドッグ機能を実装しようとするのではなく、その根本的な原因のメモリの問題に注目してください。

+0

両方です。別々にProgram.csで作成されます。お互いに関連しています。 – abhinavp

+0

@abhinavp ShowDialogメソッドのどのバージョンをShowDialogまたはShowDialog(this)を使用していますか? –

+0

@ mark-hall私はShowDialog()を使用しています。 – abhinavp

0

アプリケーション設定では、シャットダウンモードを定義できます(メインフォームを閉じるか、最後のフォームを閉じる)。最後のフォームで閉じるように設定してみてください。

アップデート:私はちょうどそれを自分自身と別の形でも、私が思う仕様ですダイアログ自体を、閉じて上にShowDialog()を呼び出して、呼び出し元を閉じる(フォームを試してみました

をしかし、このコードを使用して、私は。ダイアログを作成することができ、発信者を閉じて、ダイアログがまだ存在している:

// inside formA 
private void button2_Click(object sender, EventArgs e) 
{ 
    var owner = new Form(); 
    var dialog = new FormB(); 

    // attach to the dialog.button1.Click event to force a close 
    // of the current formA instance. 
    // button1.modifiers has (at least) to be set internal 
    dialog.button1.Click += (x, y) => this.Close(); 
    dialog.ShowDialog(owner); 

    dialog.Dispose(); 
    owner.Dispose(); 
} 

を今、私はFormBでボタン1をクリックすると、フォームAが閉じ、フォームBはまだ存在 フォームAがMainFormをでない

+0

私は基本的なデスクトップアプリケーションを持っています、それは1日閉じられていないようです。そのアプリケーションにPlugin/Addinsを埋め込むための事前定義されたメカニズムがあります。私は2つのアドインを作成したと仮定し、1つのアドインはウィンドウのフォームを継承し、ポップアップを表示することができます。 Sencond addinはForm B = new Form()を宣言し、B.showDialog()を行います。では、シャットダウンモードをどこで定義しますか。私はベースアプリケーションで変更することはできません。 – abhinavp

+0

私はあなたのメインフォーム(最初に始まるもの)はフォームAだと思った。デフォルトで、あなたがそれを変更しない限り、FormBを(ShowDialog()なしで)開いてフォームAを閉じると、フォームBも閉じる。 http://msdn.microsoft.com/en-us/library/0hzfysdc.aspxただし、そうでない場合は、B型でDisposeメソッドをオーバーライドしてBreakPointを設定するか、Exceptionをスローすることをお勧めします。多分、あなたはStackTraceから発信者を追跡することができます。 –

+0

問題はフォームBは、フォ​​ームBに追加されたコントロールで発生したイベントに基づいてこのフォームで何らかのアクションを実行する必要があるため、2番目のアドイン(フォームB =新しいフォーム())のグローバル変数として宣言されています。それに対してDisposeメソッドをオーバーライドしますか?それはグローバル変数であり、複数の関数で使用されているので、私は 'using'も使用できません。この場合、Disposeをどのように上書きできますか? – abhinavp

関連する問題