次の方法で共有


Form.Closing イベント

フォームが閉じている間に発生します。

Public Event Closing As CancelEventHandler
[C#]
public event CancelEventHandler Closing;
[C++]
public: __event CancelEventHandler* Closing;

[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。

イベント データ

イベント ハンドラが、このイベントに関連するデータを含む、CancelEventArgs 型の引数を受け取りました。次の CancelEventArgs プロパティには、このイベントの固有の情報が記載されます。

プロパティ 説明
Cancel イベントをキャンセルするかどうかを示す値を取得または設定します。

解説

Closing イベントは、フォームが閉じている間に発生します。フォームが閉じると、オブジェクト内で作成されたすべてのリソースが解放され、フォームが破棄されます。このイベントをキャンセルすると、フォームは開いたままになります。フォームを閉じる操作をキャンセルするには、イベント ハンドラに渡される CancelEventArgsCancel プロパティを true に設定します。

フォームがモーダル ダイアログ ボックスとして表示されている場合、閉じるボタン (フォームの右上隅の X が付いているボタン) をクリックするとフォームが非表示になり、 DialogResult プロパティが DialogResult.Cancel に設定されます。ユーザーが閉じるボタンをクリックしたときに DialogResult プロパティに割り当てられる値をオーバーライドするには、フォームの Closing イベントのイベント ハンドラで DialogResult プロパティを設定します。

メモ   モードレス ウィンドウとして表示されている FormClose メソッドが呼び出された場合は、フォームのリソースが既に解放されているため、 Show メソッドを呼び出してフォームを表示することはできません。フォームを非表示にした後で表示するには、 Control.Hide メソッドを使用します。

注意    Application.Exit メソッドが呼び出されてアプリケーションを終了する場合、 Form.Closed イベントと Form.Closing イベントは発生しません。これらのイベントのいずれかに実行する必要がある検証コードがある場合は、 Exit メソッドを呼び出す前に、開いている各フォームに対して Form.Close メソッドを個別に呼び出す必要があります。

フォームが MDI 親フォームの場合は、MDI 親フォームの Closing イベントが発生する前に、すべての MDI 子フォームの Closing イベントが発生します。さらに、MDI 親フォームの Closed イベントが発生する前に、すべての MDI 子フォームの Closed イベントが発生します。MDI 子フォームの Closing イベントをキャンセルしても、MDI 親フォームの Closing イベントは発生します。ただし、この子イベントをキャンセルすると、親フォームにパラメータとして渡される System.Windows.Forms.ClosingEventArgs の System.Windows.Forms.ClosingEventArgs.Cancel プロパティは false に設定されます。MDI 親フォームおよび MDI 子フォームのすべてを強制的に閉じるには、MDI 親フォームの System.Windows.Forms.ClosingEventArgs.Cancel プロパティを false に設定します。

イベント処理の詳細については、「 イベントの利用 」を参照してください。

使用例

 
Private Sub Form1_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
   ' Determine if text has changed in the textbox by comparing to original text.
   If textBox1.Text <> strMyOriginalText Then
      ' Display a MsgBox asking the user to save changes or abort.
      If MessageBox.Show("Do you want to save changes to your text?", "My Application", MessageBoxButtons.YesNo) = DialogResult.Yes Then
         ' Cancel the Closing event from closing the form.
         e.Cancel = True
      End If ' Call method to save file...
   End If
End Sub 'Form1_Closing
End Class 'Form1

[C#] 
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   // Determine if text has changed in the textbox by comparing to original text.
   if (textBox1.Text != strMyOriginalText)
   {
      // Display a MsgBox asking the user to save changes or abort.
      if(MessageBox.Show("Do you want to save changes to your text?", "My Application",
         MessageBoxButtons.YesNo) ==  DialogResult.Yes)
      {
         // Cancel the Closing event from closing the form.
         e.Cancel = true;
         // Call method to save file...
      }
   }
}

[C++] 
private:
   void Form1_Closing(Object* /*sender*/, System::ComponentModel::CancelEventArgs* e)
   {
      // Determine if text has changed in the textbox by comparing to original text.
      if (textBox1->Text != strMyOriginalText)
      {
         // Display a MsgBox asking the user to save changes or abort.
         if(MessageBox::Show(S"Do you want to save changes to your text?", S"My Application",
            MessageBoxButtons::YesNo) ==  DialogResult::Yes)
         {
            // Cancel the Closing event from closing the form.
            e->Cancel = true;
            // Call method to save file...
         }
      }
   }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

Form クラス | Form メンバ | System.Windows.Forms 名前空間 | IsMdiContainer | OnClosing