12

モーダルダイアログを表示するためのより良い方法はどれですか?

form1 frm=new form1();
frm.showDialog()

また

(new form1()).showDialog();
4

2 に答える 2

44

どちらももう一方より「優れている」わけではありません。それらは完全に同等です!

ただし、この特定のケースでは、両方が間違っています。このShowDialogメソッドDisposeでは、フォームでメソッドを呼び出す必要があります。Showandの組み合わせとは異なりClose、これは自動的には行われません。MSDNから:

フォームがモーダルダイアログボックスとして表示されている場合、[閉じる]ボタン(フォームの右上隅にあるXの付いたボタン)をクリックすると、フォームが非表示になり、DialogResultプロパティがに設定されDialogResult.Cancelます。非モーダルフォームとは異なりClose、ユーザーがダイアログボックスのフォームを閉じるボタンをクリックするか、DialogResultプロパティの値を設定するときに、メソッドは.NETFrameworkによって呼び出されません。代わりに、フォームは非表示になり、ダイアログボックスの新しいインスタンスを作成せずに再度表示できます。ダイアログボックスとして表示されるフォームは閉じられるのではなく非表示にDisposeなるため、アプリケーションでフォームが不要になったときに、フォームのメソッドを呼び出す必要があります。

したがって、次の(同等の)形式のいずれかを選択する必要があります。

using (Form1 frm = new Form1())
{
    frm.ShowDialog();
}

また

Form1 frm = new Form1();
frm.ShowDialog();
frm.Dispose();

フォームが自動的に破棄されない理由ShowDialogは、すぐにはわかりませんが、十分に単純です。アプリケーションは、フォームのコントロールで指定された設定など、フォームが閉じられたにモーダルダイアログフォームのインスタンスから値を読み取りたいことがよくあります。フォームが自動的に破棄された場合、フォームオブジェクトのプロパティにアクセスしてこれらの値を読み取ることはできません。したがって、プログラマーは、モーダルダイアログとして表示されたフォームを使い終わったときにそれらを破棄する責任があります。

于 2011-12-24T13:02:40.473 に答える
2

後でフォームにアクセスできるので、通常は最初の1つを選びます。

それ以外の場合は、閉じた後に対処したくない場合は、2番目のオンは問題ありません。

于 2011-12-24T12:57:18.497 に答える