ダイアログ ボックスの概要Dialog Boxes Overview

スタンドアロン アプリケーションは、メインのデータをアプリケーションが動作し、使用してデータを処理する機能を公開しますが両方が表示されるメイン ウィンドウを通常があるユーザー インターフェイス (UI)user interface (UI)メニュー バー、ツールバー、およびステータス バーなどのメカニズムです。Standalone applications typically have a main window that both displays the main data over which the application operates and exposes the functionality to process that data through ユーザー インターフェイス (UI)user interface (UI) mechanisms like menu bars, tool bars, and status bars. 重要なアプリケーションは、次のようなことをするための追加のウィンドウを表示することもあります。A non-trivial application may also display additional windows to do the following:

  • 固有の情報をユーザーに表示する。Display specific information to users.

  • ユーザーから情報を収集する。Gather information from users.

  • 情報の表示と収集の両方を行う。Both display and gather information.

これらの種類のウィンドウと呼ばれる ダイアログ ボックス、し、2 種類があります: モーダルとモードレスです。These types of windows are known as dialog boxes, and there are two types: modal and modeless.

Aモーダル関数には、ユーザーに続行から追加のデータが必要がある場合、関数によってダイアログ ボックスが表示されます。A modal dialog box is displayed by a function when the function needs additional data from a user to continue. 機能は、モーダル ダイアログ ボックスに依存してデータを収集するため、モーダル ダイアログ ボックスが開いている間、ユーザーはアプリケーション内の他のウィンドウをアクティブ化することはできません。Because the function depends on the modal dialog box to gather data, the modal dialog box also prevents a user from activating other windows in the application while it remains open. ほとんどの場合、モーダル ダイアログ ボックスにより、ユーザーを押すことによって、モーダル ダイアログ ボックスを終了するときに通知する、 OKまたはキャンセルボタン。In most cases, a modal dialog box allows a user to signal when they have finished with the modal dialog box by pressing either an OK or Cancel button. キーを押して、 OKボタンは、ユーザーがデータを入力し、関数がそのデータの処理を続行する必要があることを示します。Pressing the OK button indicates that a user has entered data and wants the function to continue processing with that data. キーを押して、キャンセルボタンは、ユーザーが、関数の実行を停止することを示します。Pressing the Cancel button indicates that a user wants to stop the function from executing altogether. モーダル ダイアログ ボックスの最も一般的な例は、データを開く、保存する、および印刷するために表示されます。The most common examples of modal dialog boxes are shown to open, save, and print data.

Aモードレスダイアログ ボックスで、その一方で、できないユーザーを開いているときに、他のウィンドウをアクティブ化します。A modeless dialog box, on the other hand, does not prevent a user from activating other windows while it is open. たとえば、ユーザーがドキュメント内の特定の単語の出現箇所を検索する場合、メイン ウィンドウは、多くの場合、ダイアログ ボックスを開いて、検索する単語をユーザーに尋ねます。For example, if a user wants to find occurrences of a particular word in a document, a main window will often open a dialog box to ask a user what word they are looking for. しかし、単語の検索中もユーザーはドキュメントを編集できるため、ダイアログ ボックスがモーダルである必要はありません。Since finding a word doesn't prevent a user from editing the document, however, the dialog box doesn't need to be modal. モードレス ダイアログ ボックスは、少なくとも、閉じますをダイアログ ボックスを閉じるボタンをクリックしなどの特定の機能を実行するその他のボタンを提供することがあります、次を検索ボタン、[次へ] を検索する単語が単語の検索の検索条件に一致します。A modeless dialog box at least provides a Close button to close the dialog box, and may provide additional buttons to execute specific functions, such as a Find Next button to find the next word that matches the find criteria of a word search.

Windows Presentation Foundation (WPF) ダイアログ ボックスに、メッセージ ボックス、コモン ダイアログ ボックスでは、カスタム ダイアログ ボックスなどのいくつかの種類を作成することができます。Windows Presentation Foundation (WPF) allows you to create several types of dialog boxes, including message boxes, common dialog boxes, and custom dialog boxes. このトピックでは、それぞれ、ダイアログ ボックスのサンプル一致する例を示します。This topic discusses each, and the Dialog Box Sample provides matching examples.

メッセージ ボックスMessage Boxes

Aメッセージ ボックステキストの情報を表示し、ユーザーがボタンで意思決定できるようにするために使用できるダイアログ ボックスです。A message box is a dialog box that can be used to display textual information and to allow users to make decisions with buttons. 次の図は、テキスト情報と質問を表示して、ユーザーが質問に回答するための 3 つのボタンを表示するメッセージ ボックスを示しています。The following figure shows a message box that displays textual information, asks a question, and provides the user with three buttons to answer the question.

アプリケーションの前に、ドキュメントに変更を保存するかどうかたずねるワード プロセッサ ダイアログ ボックスを閉じます。

使用するメッセージ ボックスを作成する、MessageBoxクラス。To create a message box, you use the MessageBox class. MessageBox メッセージ ボックスのテキスト、タイトル、アイコン、および、次のようなコードを使用して、ボタンを構成できます。MessageBox lets you configure the message box text, title, icon, and buttons, using code like the following.

// Configure the message box to be displayed
string messageBoxText = "Do you want to save changes?";
string caption = "Word Processor";
MessageBoxButton button = MessageBoxButton.YesNoCancel;
MessageBoxImage icon = MessageBoxImage.Warning;
' Configure the message box to be displayed
Dim messageBoxText As String = "Do you want to save changes?"
Dim caption As String = "Word Processor"
Dim button As MessageBoxButton = MessageBoxButton.YesNoCancel
Dim icon As MessageBoxImage = MessageBoxImage.Warning

メッセージ ボックスを表示するを呼び出す、 static Showメソッドを次のコードに示されています。To show a message box, you call the staticShow method, as demonstrated in the following code.

// Display message box
MessageBox.Show(messageBoxText, caption, button, icon);
' Display message box
MessageBox.Show(messageBoxText, caption, button, icon)

メッセージ ボックスを表示するコードで、ユーザーの決定 (どのボタンが押されたか) を検出して処理する必要があるときには、コードは、次のコードに示されているように、メッセージ ボックスの結果を検査できます。When code that shows a message box needs to detect and process the user's decision (which button was pressed), the code can inspect the message box result, as shown in the following code.

// Display message box
MessageBoxResult result = MessageBox.Show(messageBoxText, caption, button, icon);

// Process message box results
switch (result)
{
    case MessageBoxResult.Yes:
        // User pressed Yes button
        // ...
        break;
    case MessageBoxResult.No:
        // User pressed No button
        // ...
        break;
    case MessageBoxResult.Cancel:
        // User pressed Cancel button
        // ...
        break;
}
' Display message box
Dim result As MessageBoxResult = MessageBox.Show(messageBoxText, caption, button, icon)

' Process message box results
Select Case result
    Case MessageBoxResult.Yes
        ' User pressed Yes button
        ' ...
    Case MessageBoxResult.No
        ' User pressed No button
        ' ...
    Case MessageBoxResult.Cancel
        ' User pressed Cancel button
        ' ...
End Select

メッセージ ボックスの使用の詳細については、次を参照してください。 MessageBoxメッセージ ボックスのサンプル、およびダイアログ ボックスのサンプルします。For more information on using message boxes, see MessageBox, MessageBox Sample, and Dialog Box Sample.

MessageBox簡単なダイアログ ボックス ユーザー エクスペリエンスを使用する利点を提供できますMessageBoxが部分信頼セキュリティ サンド ボックス内で実行されるアプリケーションで表示できるウィンドウの唯一の種類 (を参照してくださいセキュリティ) などXAML ブラウザー アプリケーション (XBAP)XAML browser applications (XBAPs)します。Although MessageBox may offer a simple dialog box user experience, the advantage of using MessageBox is that is the only type of window that can be shown by applications that run within a partial trust security sandbox (see Security), such as XAML ブラウザー アプリケーション (XBAP)XAML browser applications (XBAPs).

ほとんどのダイアログ ボックスは、テキスト、選択 (チェック ボックス)、相互に排他的な選択 (オプション ボタン)、リスト選択 (リスト ボックス、コンボ ボックス、ドロップダウン リスト ボックス) など、メッセージ ボックスの結果よりも複雑なデータを表示し、収集します。Most dialog boxes display and gather more complex data than the result of a message box, including text, selection (check boxes), mutually exclusive selection (radio buttons), and list selection (list boxes, combo boxes, drop-down list boxes). 、これらの Windows Presentation Foundation (WPF) はいくつかのコモン ダイアログ ボックスを提供し、いずれかの使用は完全な信頼で実行されているアプリケーションに制限されますが、独自のダイアログ ボックスを作成することができます。For these, Windows Presentation Foundation (WPF) provides several common dialog boxes and allows you to create your own dialog boxes, although the use of either is limited to applications running with full trust.

コモン ダイアログ ボックスCommon Dialog Boxes

WindowsWindows は、ファイルを開く、ファイルを保存する、印刷するためのダイアログ ボックスなど、すべてのアプリケーションに共通の、さまざまな再利用可能なダイアログ ボックスを実装します。implements a variety of reusable dialog boxes that are common to all applications, including dialog boxes for opening files, saving files, and printing. これらのダイアログ ボックスはオペレーティング システムによって実装されるため、そのオペレーティング システム上で実行するすべてのアプリケーション間で共有でき、ユーザー エクスペリエンスの一貫性を保つことができます。ユーザーが 1 つのアプリケーションで、オペレーティング システムによって提供されるダイアログ ボックスの使用に慣れると、他のアプリケーションでも、そのダイアログ ボックスの使用法を学ぶ必要はありません。Since these dialog boxes are implemented by the operating system, they can be shared among all the applications that run on the operating system, which helps user experience consistency; when users are familiar with the use of an operating system-provided dialog box in one application, they don't need to learn how to use that dialog box in other applications. これらのダイアログ ボックスはすべてのアプリケーションで使用できる、一貫したユーザー エクスペリエンスを提供するのに役立つ、ために、これらと呼ばれます。コモン ダイアログ ボックスします。Because these dialog boxes are available to all applications and because they help provide a consistent user experience, they are known as common dialog boxes.

Windows Presentation Foundation (WPF) で、開いているファイルをカプセル化しファイルを保存印刷コモン ダイアログ ボックスしそれらがスタンドアロン アプリケーションで使用するため、マネージ クラスを公開します。Windows Presentation Foundation (WPF) encapsulates the open file, save file, and print common dialog boxes and exposes them as managed classes for you to use in standalone applications. このトピックでは、それぞれの概要を簡単に説明します。This topic provides a brief overview of each.

[ファイルを開く] ダイアログ ボックスOpen File Dialog

[ファイルを開く] ダイアログ ボックスは、次の図に示されているように、開くファイルの名前を取得するために、ファイルを開く機能によって使用されます。The open file dialog box, shown in the following figure, is used by file opening functionality to retrieve the name of a file to open.

ファイルを取得する場所を示す [開く] ダイアログ ボックス。

一般的なファイルを開く ダイアログ ボックスとして実装されている、OpenFileDialogクラスし、は、Microsoft.Win32名前空間。The common open file dialog box is implemented as the OpenFileDialog class and is located in the Microsoft.Win32 namespace. 次のコードは、[ファイルを開く] ダイアログ ボックスの作成、構成、および表示の方法と、結果を処理する方法を示しています。The following code shows how to create, configure, and show one, and how to process the result.

// Configure open file dialog box
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = ".txt"; // Default file extension
dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension

// Show open file dialog box
Nullable<bool> result = dlg.ShowDialog();

// Process open file dialog box results
if (result == true)
{
    // Open document
    string filename = dlg.FileName;
}
' Configure open file dialog box
Dim dlg As New Microsoft.Win32.OpenFileDialog()
dlg.FileName = "Document" ' Default file name
dlg.DefaultExt = ".txt" ' Default file extension
dlg.Filter = "Text documents (.txt)|*.txt" ' Filter files by extension

' Show open file dialog box
Dim result? As Boolean = dlg.ShowDialog()

' Process open file dialog box results
If result = True Then
    ' Open document
    Dim filename As String = dlg.FileName
End If

ファイルを開く ダイアログ ボックスの詳細については、次を参照してください。Microsoft.Win32.OpenFileDialogします。For more information on the open file dialog box, see Microsoft.Win32.OpenFileDialog.

注意

OpenFileDialog 部分信頼で実行しているアプリケーションに安全にファイル名を取得する使用できます (を参照してくださいセキュリティ)。OpenFileDialog can be used to safely retrieve file names by applications running with partial trust (see Security).

[ファイルの保存] ダイアログ ボックスSave File Dialog Box

[ファイルの保存] ダイアログ ボックスは、次の図に示されているように、保存するファイルの名前を取得するために、ファイルを保存する機能によって使用されます。The save file dialog box, shown in the following figure, is used by file saving functionality to retrieve the name of a file to save.

名前を付けて保存 ダイアログ ボックス、ファイルを保存する場所を示すです。

一般的な保存ファイル ダイアログ ボックスとして実装されて、SaveFileDialogクラスし、は、Microsoft.Win32名前空間。The common save file dialog box is implemented as the SaveFileDialog class, and is located in the Microsoft.Win32 namespace. 次のコードは、[ファイルを開く] ダイアログ ボックスの作成、構成、および表示の方法と、結果を処理する方法を示しています。The following code shows how to create, configure, and show one, and how to process the result.

// Configure save file dialog box
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = ".txt"; // Default file extension
dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension

// Show save file dialog box
Nullable<bool> result = dlg.ShowDialog();

// Process save file dialog box results
if (result == true)
{
    // Save document
    string filename = dlg.FileName;
}
' Configure save file dialog box
Dim dlg As New Microsoft.Win32.SaveFileDialog()
dlg.FileName = "Document" ' Default file name
dlg.DefaultExt = ".txt" ' Default file extension
dlg.Filter = "Text documents (.txt)|*.txt" ' Filter files by extension

' Show save file dialog box
Dim result? As Boolean = dlg.ShowDialog()

' Process save file dialog box results
If result = True Then
    ' Save document
    Dim filename As String = dlg.FileName
End If

詳細については、保存ファイル ダイアログ ボックスを参照してくださいMicrosoft.Win32.SaveFileDialogします。For more information on the save file dialog box, see Microsoft.Win32.SaveFileDialog.

次の図に示されているように、[印刷] ダイアログ ボックスは、ユーザーがデータを印刷するプリンターを選択し、構成するために、印刷機能によって使用されます。The print dialog box, shown in the following figure, is used by printing functionality to choose and configure the printer that a user would like to print data to.

印刷ダイアログ ボックスのスクリーン ショット。

一般的な印刷ダイアログ ボックスとして実装されて、PrintDialogクラスし、は、System.Windows.Controls名前空間。The common print dialog box is implemented as the PrintDialog class, and is located in the System.Windows.Controls namespace. 次のコードは、[印刷] ダイアログ ボックスの作成、構成、および表示の方法を示しています。The following code shows how to create, configure, and show one.

// Configure printer dialog box
System.Windows.Controls.PrintDialog dlg = new System.Windows.Controls.PrintDialog();
dlg.PageRangeSelection = PageRangeSelection.AllPages;
dlg.UserPageRangeEnabled = true;

// Show save file dialog box
Nullable<bool> result = dlg.ShowDialog();

// Process save file dialog box results
if (result == true)
{
    // Print document
}
' Configure printer dialog box
Dim dlg As New PrintDialog()
dlg.PageRangeSelection = PageRangeSelection.AllPages
dlg.UserPageRangeEnabled = True

' Show save file dialog box
Dim result? As Boolean = dlg.ShowDialog()

' Process save file dialog box results
If result = True Then
    ' Print document
End If

[印刷] ダイアログ ボックスの詳細については、次を参照してください。System.Windows.Controls.PrintDialogします。For more information on the print dialog box, see System.Windows.Controls.PrintDialog. 印刷の詳細についてはWPFWPFを参照してください印刷の概要します。For detailed discussion of printing in WPFWPF, see Printing Overview.

カスタム ダイアログ ボックスCustom Dialog Boxes

コモン ダイアログ ボックスは便利であり、可能なときにはコモン ダイアログ ボックスを使用する必要がありますが、ドメイン固有のダイアログ ボックスの要件はサポートしていません。While common dialog boxes are useful, and should be used when possible, they do not support the requirements of domain-specific dialog boxes. このような場合は、独自のダイアログ ボックスを作成する必要があります。In these cases, you need to create your own dialog boxes. これから説明するように、ダイアログ ボックスは、特殊な動作を持つウィンドウです。As we'll see, a dialog box is a window with special behaviors. Window これらの動作を実装し、その結果を使用するWindowカスタムのモーダルとモードレスのダイアログ ボックスを作成します。Window implements those behaviors and, consequently, you use Window to create custom modal and modeless dialog boxes.

モーダルのカスタム ダイアログ ボックスの作成Creating a Modal Custom Dialog Box

このトピックでは、使用する方法を示しますWindow一般的なモーダル ダイアログ ボックスの実装を作成するを使用して、 Margins ダイアログ ボックスを例として (を参照してくださいダイアログ ボックスのサンプル)。This topic shows how to use Window to create a typical modal dialog box implementation, using the Margins dialog box as an example (see Dialog Box Sample). Margins ダイアログ ボックスは次の図に示します。The Margins dialog box is shown in the following figure.

左余白、上余白、右の余白および下余白を定義するフィールドの余白 ダイアログ ボックス。

モーダル ダイアログ ボックスの構成Configuring a Modal Dialog Box

一般的なダイアログ ボックスのユーザー インターフェイスには、次の項目が含まれます。The user interface for a typical dialog box includes the following:

  • 必要なデータを収集するために必要なさまざまなコントロール。The various controls that are required to gather the desired data.

  • 示す、 OKユーザーがクリックすると、関数に戻り、ダイアログ ボックスを閉じるし、処理を続行ボタンをクリックします。Showing an OK button that users click to close the dialog box, return to the function, and continue processing.

  • 示す、キャンセルクリックするダイアログ ボックスを閉じるし、関数の処理を停止するボタンをクリックします。Showing a Cancel button that users click to close the dialog box and stop the function from further processing.

  • 表示、閉じるタイトル バーにボタンをクリックします。Showing a Close button in the title bar.

  • アイコンの表示。Showing an icon.

  • 示す最小化最大化、および復元ボタン。Showing Minimize, Maximize, and Restore buttons.

  • 表示、システムメニューを最小限に抑える、最大化、復元、およびダイアログ ボックスを閉じます。Showing a System menu to minimize, maximize, restore, and close the dialog box.

  • ダイアログ ボックスは、ダイアログ ボックスを開いたウィンドウの上と中央に開きます。Opening above and in the center of the window that opened the dialog box.

  • ダイアログ ボックスは、可能な場合はサイズ変更可能である必要があるため、ダイアログ ボックスが小さくなりすぎるのを避け、便利な既定サイズをユーザーに提供するために、既定の寸法と最小寸法の両方を設定する必要があります。Dialog boxes should be resizable where possible so, to prevent the dialog box from being too small, and to provide the user with a useful default size, you need to set both default and a minimum dimensions respectively.

  • 原因となるキーボード ショートカットとして構成するか、ESC キーを押して、キャンセル ボタンを押します。Pressing the ESC key should be configured as a keyboard shortcut that causes the Cancel button to be pressed. これを設定することで実現されます、IsCancelのプロパティ、キャンセルボタンtrueします。This is achieved by setting the IsCancel property of the Cancel button to true.

  • 原因となるキーボード ショートカットとして構成する必要があります」と入力 (または RETURN) キーを押して、 OK ボタンを押します。Pressing the ENTER (or RETURN) key should be configured as a keyboard shortcut that causes the OK button to be pressed. これを設定することで実現されます、IsDefaultのプロパティ、 OKボタンtrueします。This is achieved by setting the IsDefault property of the OK button true.

次のコードは、この構成の例を示しています。The following code demonstrates this configuration.

ダイアログ ボックスのユーザー エクスペリエンスは、ダイアログ ボックスを開くウィンドウのメニュー バーにも及びます。The user experience for a dialog box also extends into the menu bar of the window that opens the dialog box. メニュー項目が、機能の続行には、ダイアログ ボックスでのユーザーの操作を必要とする機能を実行するときには、次に示されているように、その機能のメニュー項目の見出しに省略記号を付けます。When a menu item runs a function that requires user interaction through a dialog box before the function can continue, the menu item for the function will have an ellipsis in its header, as shown here.

メニュー項目が、[バージョン情報] ダイアログ ボックスなど、ユーザーの操作を必要としないダイアログ ボックスを表示する機能を実行するときには、省略記号は必要ありません。When a menu item runs a function that displays a dialog box which does not require user interaction, such as an About dialog box, an ellipsis is not required.

モーダル ダイアログ ボックスを開くOpening a Modal Dialog Box

ダイアログ ボックスは、通常、ワード プロセッサでドキュメントの余白を設定するなど、ドメイン固有の機能を実行するためにユーザーがメニュー項目を選択した結果として表示されます。A dialog box is typically shown as a result of a user selecting a menu item to perform a domain-specific function, such as setting the margins of a document in a word processor. ウィンドウをダイアログ ボックスとして表示するのは、通常のウィンドウを表示するのと同様ですが、ダイアログ ボックス固有の追加の構成が必要です。Showing a window as a dialog box is similar to showing a normal window, although it requires additional dialog box-specific configuration. ダイアログ ボックスのインスタンス化、構成、および開くプロセスの全体を、次のコードに示します。The entire process of instantiating, configuring, and opening a dialog box is shown in the following code.

ここでは、コードは既定の情報 (現在の余白) をダイアログ ボックスに渡しています。Here, the code is passing default information (the current margins) to the dialog box. これはまた、Window.Owner プロパティを、ダイアログ ボックスを表示しているウィンドウへの参照で設定します。It is also setting the Window.Owner property with a reference to the window that is showing the dialog box. 一般に、すべてのダイアログ ボックスに共通するウィンドウの状態関連動作を提供するために、ダイアログ ボックスの所有者を必ず設定する必要があります (詳細については、「WPF ウィンドウの概要」を参照してください)。In general, you should always set the owner for a dialog box to provide window state-related behaviors that are common to all dialog boxes (see WPF Windows Overview for more information).

注意

サポートするために所有者を指定する必要がありますユーザー インターフェイス (UI)user interface (UI) ダイアログ ボックスのための自動化 (を参照してくださいUI オートメーションの概要)。You must provide an owner to support ユーザー インターフェイス (UI)user interface (UI) automation for dialog boxes (see UI Automation Overview).

呼び出しでモーダルとして表示されます ダイアログ ボックスを構成したら、ShowDialogメソッド。After the dialog box is configured, it is shown modally by calling the ShowDialog method.

ユーザー指定データの検証Validating User-Provided Data

ダイアログ ボックスが開かれ、ユーザーが必要なデータを指定すると、ダイアログ ボックスは、指定されたデータが有効であることを確認する必要があります。これは、次のような理由からです。When a dialog box is opened and the user provides the required data, a dialog box is responsible for ensuring that the provided data is valid for the following reasons:

  • セキュリティの観点から、すべての入力を検証する必要があります。From a security perspective, all input should be validated.

  • ドメイン固有の観点から、データの検証は、誤ったデータがコードによって処理されて、例外がスローされるのを防ぎます。From a domain-specific perspective, data validation prevents erroneous data from being processed by the code, which could potentially throw exceptions.

  • ユーザー エクスペリエンスの観点から、ダイアログ ボックスは、入力したデータが無効であることを示すことによって、ユーザーを支援できます。From a user-experience perspective, a dialog box can help users by showing them which data they have entered is invalid.

  • パフォーマンスの観点から、多層アプリケーションでのデータの検証は、特に、アプリケーションが Web サービスまたはサーバーベースのデータベースで構成される場合、クライアント層とアプリケーション層の間のラウンド トリップの回数を減らすことができます。From a performance perspective, data validation in a multi-tier application can reduce the number of round trips between the client and the application tiers, particularly when the application is composed of Web services or server-based databases.

バインドされたコントロールを検証するWPFWPF、検証規則を定義し、バインドに関連付ける必要があります。To validate a bound control in WPFWPF, you need to define a validation rule and associate it with the binding. 検証規則はから派生したカスタム クラスValidationRuleします。A validation rule is a custom class that derives from ValidationRule. 次の例では、検証規則、 MarginValidationRule、バインドされている値は、ことをチェックする、Doubleと、指定した範囲内にあります。The following example shows a validation rule, MarginValidationRule, which checks that a bound value is a Double and is within a specified range.

このコードは、オーバーライドすることで、検証規則の検証ロジックを実装、Validateメソッドでは、データを検証し、適切な返しますValidationResultします。In this code, the validation logic of a validation rule is implemented by overriding the Validate method, which validates the data and returns an appropriate ValidationResult.

検証規則をバインド コントロールに関連付けるには、次のマークアップを使用します。To associate the validation rule with the bound control, you use the following markup.

検証規則が関連付けられている、WPFWPF自動的に適用されますが、バインドされたコントロールにデータが入力されるとします。Once the validation rule is associated, WPFWPF will automatically apply it when data is entered into the bound control. コントロールに無効なデータが含まれている場合WPFWPF次の図に示すように、無効なコントロールでは、周囲に赤い境界線が表示されます。When a control contains invalid data, WPFWPF will display a red border around the invalid control, as shown in the following figure.

無効な左余白の値を囲む赤い境界線付きの余白 ダイアログ ボックス。

WPFWPF は、ユーザーが有効なデータを入力するまで、ユーザーを無効なコントロールに制限するわけではありません。does not restrict a user to the invalid control until they have entered valid data. これは、ダイアログ ボックスとして適切な動作です。データが有効かどうかにかかわらず、ユーザーはダイアログ ボックス内のコントロールを自由に移動できる必要があります。This is good behavior for a dialog box; a user should be able to freely navigate the controls in a dialog box whether or not data is valid. ユーザーは、無効なデータとキーを押して入力してください。 ただし、これは意味、 OKボタンをクリックします。However, this means a user can enter invalid data and press the OK button. このため、コードも必要があるダイアログ内のすべてのコントロールを検証するときにボックス、 [ok] ボタンを処理することによって、Clickイベント。For this reason, your code also needs to validate all controls in a dialog box when the OK button is pressed by handling the Click event.

このコードは、ウィンドウ上のすべての依存関係オブジェクトを列挙しますと、いずれかが有効でない場合 (によって返されるGetHasError、無効なコントロールがフォーカスを取得、IsValidメソッドを返します。 false、ウィンドウは無効とみなされるとします。This code enumerates all dependency objects on a window and, if any are invalid (as returned by GetHasError, the invalid control gets the focus, the IsValid method returns false, and the window is considered invalid.

ダイアログ ボックスが有効な場合は、安全に閉じて、戻ることができます。Once a dialog box is valid, it can safely close and return. 復帰プロセスの一環として、呼び出し元の機能に結果を返す必要があります。As part of the return process, it needs to return a result to the calling function.

モーダル ダイアログ ボックスの結果を設定するSetting the Modal Dialog Result

使用してダイアログ ボックスを開くShowDialogメソッドを呼び出すようには、基本的に: を使用して、ダイアログ ボックスを開いたコードShowDialogまで待機ShowDialogを返します。Opening a dialog box using ShowDialog is fundamentally like calling a method: the code that opened the dialog box using ShowDialog waits until ShowDialog returns. ときにShowDialog返します、かどうかに基づくした処理を続行するか、処理を停止するかどうかを決定する必要がある呼び出し元コードには、ユーザーが押した、 OKボタンまたはキャンセルボタン。When ShowDialog returns, the code that called it needs to decide whether to continue processing or stop processing, based on whether the user pressed the OK button or the Cancel button. として、ユーザーの選択肢を返す必要があります ダイアログ ボックスをこの決定を容易にする、Booleanから返される値、ShowDialogメソッド。To facilitate this decision, the dialog box needs to return the user's choice as a Boolean value that is returned from the ShowDialog method.

ときに、 OKボタンがクリックされたShowDialog返す必要がありますtrueします。When the OK button is clicked, ShowDialog should return true. これを設定することで実現されます、DialogResultプロパティのダイアログ ボックス、 OKボタンがクリックされました。This is achieved by setting the DialogResult property of the dialog box when the OK button is clicked.

その設定に注意してください、DialogResultプロパティで明示的に呼び出す必要が自動的に閉じるウィンドウの指定もCloseします。Note that setting the DialogResult property also causes the window to close automatically, which alleviates the need to explicitly call Close.

ときに、キャンセルボタンがクリックされたShowDialog返す必要がありますfalseを設定する必要があります、DialogResultプロパティ。When the Cancel button is clicked, ShowDialog should return false, which also requires setting the DialogResult property.

ボタンのIsCancelプロパティに設定されてtrueか押すと、キャンセルボタンか ESC キー、DialogResultに自動的に設定されているfalseします。When a button's IsCancel property is set to true and the user presses either the Cancel button or the ESC key, DialogResult is automatically set to false. 次のマークアップが上記のコードで処理するために必要としない場合と同様、Clickイベント。The following markup has the same effect as the preceding code, without the need to handle the Click event.

ダイアログ ボックスが自動的に返しますfalseユーザーが押すと、閉じるタイトル バーにボタンをクリックしてまたは選択、閉じるからメニュー項目、システムメニュー。A dialog box automatically returns false when a user presses the Close button in the title bar or chooses the Close menu item from the System menu.

モーダル ダイアログ ボックスから返されたデータの処理Processing Data Returned from a Modal Dialog Box

ときにDialogResult設定 ダイアログ ボックスで開いた関数は、検査することによってダイアログ ボックスの結果を取得できます、DialogResultプロパティとShowDialogを返します。When DialogResult is set by a dialog box, the function that opened it can get the dialog box result by inspecting the DialogResult property when ShowDialog returns.

ダイアログの結果が場合true関数を使用して、キューとを取得し、ユーザーが提供するデータを処理します。If the dialog result is true, the function uses that as a cue to retrieve and process the data provided by the user.

注意

ShowDialogが返されると、ダイアログ ボックスを再度開くことはできません。After ShowDialog has returned, a dialog box cannot be reopened. 代わりに、新しいインスタンスを作成する必要があります。Instead, you need to create a new instance.

ダイアログの結果が場合false関数が適切に処理を終了する必要があります。If the dialog result is false, the function should end processing appropriately.

モードレス カスタム ダイアログ ボックスの作成Creating a Modeless Custom Dialog Box

次の図に示されている [検索] ダイアログ ボックスなどのモードレス ダイアログ ボックスは、基本的な外観はモーダル ダイアログ ボックスと同じです。A modeless dialog box, such as the Find Dialog Box shown in the following figure, has the same fundamental appearance as the modal dialog box.

検索ダイアログ ボックスのスクリーン ショット。

しかし、次のセクションで説明するように、動作は少し異なります。However, the behavior is slightly different, as described in the following sections.

モードレス ダイアログ ボックスを開くOpening a Modeless Dialog Box

モードレス ダイアログ ボックスが呼び出すことによって開かれる、Showメソッド。A modeless dialog box is opened by calling the Show method.

異なりShowDialogShowが直ちに返されます。Unlike ShowDialog, Show returns immediately. その結果、呼び出し元のウィンドウは、モードレス ダイアログ ボックスが閉じられたことを知ることができず、したがって、ダイアログ ボックスの結果を確認するタイミングを判断したり、ダイアログ ボックスからデータを取得して、さらに処理したりすることができません。Consequently, the calling window cannot tell when the modeless dialog box is closed and, therefore, does not know when to check for a dialog box result or get data from the dialog box for further processing. 代わりに、ダイアログ ボックスは、別の方法を作成して、呼び出し元のウィンドウに処理用のデータを返す必要があります。Instead, the dialog box needs to create an alternative way to return data to the calling window for processing.

モードレス ダイアログ ボックスから返されたデータの処理Processing Data Returned from a Modeless Dialog Box

この例で、 FindDialogBox 1 つまたは複数の検索によって特定の頻度に検索されているテキストのメイン ウィンドウに結果を返す可能性があります。In this example, the FindDialogBox may return one or more find results to the main window, depending on the text being searched for without any specific frequency. モーダル ダイアログ ボックスと同様、モードレス ダイアログ ボックスは、プロパティを使用して結果を返すことができます。As with a modal dialog box, a modeless dialog box can return results using properties. ただし、ダイアログ ボックスを所有しているウィンドウは、それらのプロパティを確認するタイミングを知る必要があります。However, the window that owns the dialog box needs to know when to check those properties. これを可能にする方法の 1 つは、ダイアログ ボックスで、テキストが見つかったときに発生するイベントを実装することです。One way to enable this is for the dialog box to implement an event that is raised whenever text is found. FindDialogBox 実装して、TextFoundEventこの目的で、最初にデリゲートが必要です。FindDialogBox implements the TextFoundEvent for this purpose, which first requires a delegate.

使用して、TextFoundEventHandlerデリゲートFindDialogBox実装、TextFoundEventします。Using the TextFoundEventHandler delegate, FindDialogBox implements the TextFoundEvent.

その結果、Find検索結果が見つかった場合は、イベントを発生させることができます。Consequently, Find can raise the event when a search result is found.

そのとき、所有者ウィンドウは、このイベントを登録し、処理する必要があります。The owner window then needs to register with and handle this event.

モードレス ダイアログ ボックスを閉じるClosing a Modeless Dialog Box

DialogResultするシステムを使用して、モードレス ダイアログ ボックスを閉じることができますを設定する必要はありません、以下のメカニズムを提供します。Because DialogResult does not need to be set, a modeless dialog can be closed using system provide mechanisms, including the following:

  • クリックすると、閉じるタイトル バーにボタンをクリックします。Clicking the Close button in the title bar.

  • Alt キーを押しながら F4 キーを押す。Pressing ALT+F4.

  • 選択閉じるから、システムメニュー。Choosing Close from the System menu.

または、コードを呼び出すことができますCloseときに、閉じるボタンをクリックします。Alternatively, your code can call Close when the Close button is clicked.

関連項目See also