サーチ…


前書き

このトピックでは、WinFormsエンジンがフォームを表示する方法と、フォームのライフタイムを制御する方法について説明します。

モードレスまたはモーダルフォームを表示する

WinFormsデザイナーでフォームの構造を定義した後、2つの異なる方法でコードをフォームに表示することができます。

  • メソッド - モデルレスフォーム

     Form1 aForm1Instance = new Form1(); 
     aForm1Instance.Show();
    
  • メソッド - モーダルダイアログ

     Form2 aForm2Instance = new Form2(); 
     aForm2Instance.ShowDialog();
    

2つの方法は非常に重要な違いがあります。最初の方法(モードレス1)はフォームを表示し、直前に開いたフォームの終了を待たずにすぐに戻ります。だからあなたのコードはショーの呼び出しに続くもので続行します。 2番目の方法(モーダル1)では、フォームを開き、閉じるボタンまたはフォームを閉じるように適切に構成されたボタンを使用してフォームを閉じるまで、アプリケーション全体のアクティビティをブロックします

モードレスフォームを閉じる

アプリケーションのメイン画面の横に恒久的に何かを表示する必要がある場合(通常、凡例や、デバイスやMDI子ウィンドウから非同期的にデータストリーム上のビューを考える)、モードレスフォームが採用されます。
しかし、あなたがそれを閉じたいときには、モードレスのフォームがユニークな課題になります。インスタンスを取得し、そのインスタンスでCloseメソッドを呼び出す方法は?

閉じたいインスタンスを参照するグローバル変数を保持することができます。

theGlobalInstance.Close();
theGlobalInstance.Dispose();
theGlobalInstance = null;

しかし、フォームエンジンが作成され、まだ開いているフォームインスタンスをすべて格納するApplication.OpenFormsコレクションを使用することもできます。

このコレクションからその特定のインスタンスを取得し、Closeメソッドを呼び出すことができます

Form2 toClose = Application.OpenForms.OfType<Form2>().FirstOrDefault();
if(toClose != null)
{
    toClose.Close();
    toClose.Dispose();
}

モーダルフォームを閉じる

ShowDialogメソッドを使用してフォームが表示される場合、フォームのDialogResultプロパティをフォームに近づけるように設定する必要があります。このプロパティは、 DialogResultとも呼ばれる列挙型を使用して設定できます。

フォームを閉じるには、あなただけのフォームの設定する必要がDialogResult (によって任意の値にプロパティをDialogResult.Noneいくつかのイベントハンドラで)。コードがイベントハンドラを終了すると、WinFormエンジンはフォームを非表示にし、最初のShowDialogメソッド呼び出しに続くコードは実行を継続します。

private cmdClose_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
}

呼び出しコードは、ユーザーがフォーム内でクリックしたボタンを特定するために、ShowDialogからの戻り値を取得できます。 ShowDialog()を使用して表示すると、フォームは自動的には処理されません(単に隠されていて閉じられていないため)ので、フォームを確実に配置するためにusingブロックを使用することが重要です。

以下は、組み込みのOpenFileDialogを使用した結果をチェックし、結果をチェックし、ダイアログからプロパティにアクセスする前にそれにアクセスする例です。

using (var form = new OpenFileDialog())
{
    DialogResult result = form.ShowDialog();
    if (result == DialogResult.OK)
    {
        MessageBox.Show("Selected file is: " + form.FileName);
    }
}

また、ボタンのDialogResultプロパティを設定することもできます。このボタンをクリックすると、フォームのDialogResultプロパティがボタンに関連付けられた値に設定されます。これにより、コード内にDialogResultを設定するイベントハンドラを追加せずにフォームを閉じることができます。

たとえば、フォームにOKボタンを追加し、そのプロパティをDialogResult.OK設定すると、そのボタンを押すとフォームが自動的に閉じられ、呼び出しコードはShowDialog()メソッド呼び出しからDialogResult.OKを受け取ります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow