モーダルダイアログを表示するためのより良い方法はどれですか?
form1 frm=new form1();
frm.showDialog()
また
(new form1()).showDialog();
モーダルダイアログを表示するためのより良い方法はどれですか?
form1 frm=new form1();
frm.showDialog()
また
(new form1()).showDialog();
どちらももう一方より「優れている」わけではありません。それらは完全に同等です!
ただし、この特定のケースでは、両方が間違っています。このShowDialog
メソッドDispose
では、フォームでメソッドを呼び出す必要があります。Show
andの組み合わせとは異なり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
は、すぐにはわかりませんが、十分に単純です。アプリケーションは、フォームのコントロールで指定された設定など、フォームが閉じられた後にモーダルダイアログフォームのインスタンスから値を読み取りたいことがよくあります。フォームが自動的に破棄された場合、フォームオブジェクトのプロパティにアクセスしてこれらの値を読み取ることはできません。したがって、プログラマーは、モーダルダイアログとして表示されたフォームを使い終わったときにそれらを破棄する責任があります。
後でフォームにアクセスできるので、通常は最初の1つを選びます。
それ以外の場合は、閉じた後に対処したくない場合は、2番目のオンは問題ありません。