次の方法で共有


ウィンドウまたはダイアログ ボックスを閉じる方法

この記事では、ウィンドウまたはダイアログ ボックスを閉じるさまざまな方法について説明します。 ユーザーは、次のようなクライアント以外の領域の要素を使用してウィンドウを閉じることができます。

  • [システム] メニューの [閉じる] 項目。
  • Alt + F4 キーを押します。
  • [閉じる] ボタンを押します。
  • ボタンに プロパティがモーダル ウィンドウでIsCancelに設定されている場合はtrueを押します。

ウィンドウを設計する場合は、ウィンドウを閉じるメカニズムをクライアント領域に追加します。 ウィンドウを閉じるのに使用されるウィンドウの一般的なデザイン要素には、次のようなものがあります。

  • [ファイル] メニューの [終了] 項目 (通常はメイン アプリケーション ウィンドウ用)。
  • [ファイル] メニューの [閉じる] 項目 (通常はセカンダリ アプリケーション ウィンドウ)。
  • 通常、モーダル ダイアログ ボックスの [キャンセル ] ボタン。
  • モードレス ダイアログ ボックスで通常使用される[閉じる]ボタン。

重要

ウィンドウを閉じると、同じオブジェクト インスタンスを使用してウィンドウを再度開くできなくなります。

ウィンドウの有効期間の詳細については、「 WPF ウィンドウの概要: ウィンドウの有効期間」を参照してください。

モーダル ウィンドウを閉じる

ShowDialog メソッドで開かれたウィンドウを閉じるときに、DialogResult プロパティを true または false に設定して、"accepted" または "canceled" 状態をそれぞれ示します。 DialogResult プロパティが値に設定されるとすぐに、ウィンドウが閉じます。 次のコードは、 DialogResult プロパティの設定を示しています。

private void okButton_Click(object sender, RoutedEventArgs e) =>
    DialogResult = true;

private void cancelButton_Click(object sender, RoutedEventArgs e) =>
    DialogResult = false;
Private Sub okButton_Click(sender As Object, e As RoutedEventArgs)
    DialogResult = True
End Sub

Private Sub cancelButton_Click(sender As Object, e As RoutedEventArgs)
    DialogResult = False
End Sub

Close メソッドを呼び出すこともできます。 Close メソッドを使用する場合、DialogResult プロパティは false に設定されます。

ウィンドウを閉じると、同じオブジェクト インスタンスで再度開くことはありません。 同じウィンドウを表示しようとすると、 InvalidOperationException がスローされます。 代わりに、ウィンドウの新しいインスタンスを作成して開きます。

モードレス ウィンドウを閉じる

Show メソッドで開かれたウィンドウを閉じるときは、Close メソッドを使用します。 次のコードは、モードレス ウィンドウを閉じる方法を示しています。

private void closeButton_Click(object sender, RoutedEventArgs e) =>
    Close();
Private Sub closeButton_Click(sender As Object, e As RoutedEventArgs)
    Close()
End Sub

IsCancel で閉じる

Button.IsCancel プロパティを true に設定すると、ESC キーを使用してウィンドウを自動的に閉じることができます。 これは、ウィンドウが ShowDialog メソッドで開かれている場合にのみ機能します。

<Button Name="cancelButton" IsCancel="True">Cancel</Button>

ウィンドウを非表示にする

ウィンドウを閉じる代わりに、 Hide メソッドを使用してウィンドウを非表示にできます。 非表示のウィンドウは、閉じられているウィンドウとは異なり、再度開くことができます。 ウィンドウ オブジェクト インスタンスを再利用する場合は、ウィンドウを閉じるのではなく非表示にします。 次のコードは、ウィンドウを非表示にする方法を示しています。

private void saveButton_Click(object sender, RoutedEventArgs e) =>
    Hide();
Private Sub saveButton_Click(sender As Object, e As RoutedEventArgs)
    Hide()
End Sub

取り消し、閉じる、非表示

ウィンドウを閉じるのではなく非表示にするようにボタンを設計した場合でも、ユーザーはこれをバイパスしてウィンドウを閉じることができます。 システム メニューの [閉じる ] 項目と、ウィンドウのクライアント以外の領域の [閉じる ] ボタンは、ウィンドウを非表示にするのではなく閉じます。 ウィンドウを閉じるのではなく非表示にすることを意図している場合は、このシナリオを検討してください。

注意事項

ウィンドウが ShowDialogでモーダルに表示される場合、ウィンドウが非表示の場合、 DialogResult プロパティは null に設定されます。 独自のプロパティをウィンドウに追加して、呼び出し元のコードに状態を伝える必要があります。

ウィンドウが閉じられると、 Closing イベントが発生します。 ハンドラーには、CancelEventArgs プロパティを実装するCancelが渡されます。 ウィンドウが閉じないようにするには、そのプロパティを true に設定します。 次のコードは、クロージャをキャンセルし、代わりにウィンドウを非表示にする方法を示しています。

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    // Cancel the closure
    e.Cancel = true;

    // Hide the window
    Hide();
}
Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)
    ' Cancel the closure
    e.Cancel = True

    ' Hide the window
    Hide()
End Sub

ウィンドウを非表示にせず、ユーザーがウィンドウを閉じないようにする場合があります。 詳細については、「 WPF ウィンドウの概要: ウィンドウの終了をキャンセルする」を参照してください。

こちらも参照ください