2

別のフォームからフォームを起動しています。サブフォームを表示する前に親フォームを破棄したいので、次を使用します。

 this.Dispose();
 form.ShowDialog(); 

フォームが表示されるのですが、このやり方でよろしいでしょうか?ShowDialog()フォーム from は、メイン フォームからの呼び出しによって起動されます。メイン フォームが編集可能になる前に、これらのフォームを閉じる必要があります。

EDIT:

これが基本的なプロセスです

Mainform>(Showdialog)>form1>(dispose+showDialog)>form2(dispose)>Mainform

4

5 に答える 5

3

子が表示される前に親が表示されないようにしたい場合、および親を閉じたい場合:

var f = new ChildForm();
this.Hide();
f.Show();
this.Close();

ShowDialog()つまり、「このフォームを表示して、閉じたら私に戻ってください」という意味です。それはあなたが起こりたいとあなたが言ったことではありません。

コメントに基づいて、メインフォームからform2を作成して表示する方が理にかなっている場合があります。

メインフォーム:

   DialogResult form1Result;
     using (var f = new Form1())
     {
        form1Result = f.ShowDialog();
     }
     if (form1Result == DialogResult.OK)
     {
        using (var f2 = new Form2())
        {
           f2.ShowDialog();
        }
     } 

そして、最初にForm2を生成したForm1イベントで

this.DialogResult = DialogResult.OK;
this.Close();
于 2012-06-25T11:06:08.287 に答える
2

Dispose任意のオブジェクト ( として知られている現在のオブジェクトを含む) を呼び出すthisと、そのオブジェクトが終了したことを意味し、最終的に終了します。

Close最初のダイアログを表示してから、2 番目のダイアログを表示することをお勧めします。

于 2012-06-25T10:48:56.560 に答える
1

子ダイアログをモーダルに表示している場合 (この場合)、親ダイアログを非表示にできます。親フォームを非表示にし、子フォームを表示してから、親フォームを閉じることができます。

var form = new SomeForm();
this.Hide();
form.ShowDialog(); // the code will be blocked at this point until the child form closes
this.Close();
this.Dispose(); // i'm not sure if this is necessary anymore. check MSDN

(モーダルではなく) フォームを表示している場合は、親フォームを非表示にし、子フォームの close イベントをリッスンしてから、ハンドラーで親フォームを閉じることができます。

void childFormClosed(Event e) 
{
    this.Close();
}

var form = new SomeForm();
form.Closed += new EventHandler... // I usually rely on intellisense with this
this.Hide();
form.ShowDialog();
于 2012-06-25T14:37:57.027 に答える
0

子フォームのライフサイクルは親のライフサイクルに依存します。つまり、親フォームのparent.closeを呼び出すと、そのインスタンスによって作成されたすべてのオブジェクトが破棄されます。

親から独立して子を作成する必要があります。

于 2012-06-25T13:12:20.397 に答える
0

申し訳ありませんが、ShowDialog メソッドを呼び出すと、子フォームが親フォームに依存するようになるため、それはできないと思います。そのため、子フォームを終了するまで、dispose の呼び出しは中断されます。

「Show」メソッドを呼び出す必要があると思います。その後、dispose メソッドを呼び出すことができます。

于 2012-06-25T10:51:56.343 に答える