Übersicht über DialogfelderDialog boxes overview

Eigenständige Anwendungen haben in der Regel ein Hauptfenster, dass sowohl die hauptsächlichen Daten über den die Anwendung ausgeführt wird, und macht die Funktionalität zum Verarbeiten dieser Daten über zeigt Benutzeroberfläche (User Interface, UI)user interface (UI) -Mechanismen wie Menüleisten, Symbolleisten und Statusleisten.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 Benutzeroberfläche (User Interface, UI)user interface (UI) mechanisms like menu bars, tool bars, and status bars. Eine nicht triviale Anwendung kann auch zusätzliche Fenster anzeigen, um Folgendes auszuführen:A non-trivial application may also display additional windows to do the following:

  • Spezifische Informationen für Benutzer anzeigen.Display specific information to users.

  • Informationen von Benutzern erfassen.Gather information from users.

  • Informationen sowohl anzeigen als auch erfassen.Both display and gather information.

Diese Fenstertypen werden als bezeichnet Dialogfelder, und es gibt zwei Arten: modale und nicht modale.These types of windows are known as dialog boxes, and there are two types: modal and modeless.

Ein modale Dialogfeld wird von einer Funktion angezeigt, wenn die Funktion zusätzliche Daten von einem Benutzer, um den Vorgang fortzusetzen.A modal dialog box is displayed by a function when the function needs additional data from a user to continue. Da die Funktion beim Erfassen der Daten vom modalen Dialogfeld abhängig ist, verhindert das modale Dialogfeld auch, dass der Benutzer andere Fenster in der Anwendung aktiviert, während das Dialogfeld geöffnet bleibt.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. In den meisten Fällen kann ein modales Dialogfeld einen Benutzer aus, um zu signalisieren, wenn sie mit das modale Dialogfeld abgeschlossen haben, drücken Sie eine eine OK oder Abbrechen Schaltfläche.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. Drücken Sie die OK Schaltfläche gibt an, dass ein Benutzer Daten eingegeben hat und möchte, die Funktion zum Fortsetzen der Verarbeitung dieser Daten dass.Pressing the OK button indicates that a user has entered data and wants the function to continue processing with that data. Drücken Sie die Abbrechen Schaltfläche gibt an, dass ein Benutzer möchte auf die Funktion die Ausführung komplett abbricht.Pressing the Cancel button indicates that a user wants to stop the function from executing altogether. Die häufigsten Beispiele für modale Dialogfelder sind das Öffnen, Speichern und Drucken von Daten.The most common examples of modal dialog boxes are shown to open, save, and print data.

Ein nicht modale im Dialogfeld auf der anderen Seite verhindert nicht, dass einen Benutzer über andere Fenster aktiviert wird, während er geöffnet ist.A modeless dialog box, on the other hand, does not prevent a user from activating other windows while it is open. Wenn ein Benutzer z. B. Vorkommen eines bestimmten Worts in einem Dokument finden möchte, wird in einem Hauptfenster oft ein Dialogfeld geöffnet, um den Benutzer zu fragen, nach welchem Wort er sucht.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. Da die Suche nach einem Wort einen Benutzer aber nicht an der Bearbeitung des Dokuments hindert, muss das Dialogfeld nicht unbedingt modal sein.Since finding a word doesn't prevent a user from editing the document, however, the dialog box doesn't need to be modal. Ein nicht modales Dialogfeld enthält mindestens ein schließen Schaltfläche, um das Dialogfeld zu schließen, und möglicherweise zusätzliche Schaltflächen, um bestimmte Funktionen auszuführen, z. B. eine Weitersuchen Schaltfläche, um die nächste Wort, das entspricht die Suchkriterien einer Wortsuche.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) können Sie mehrere Typen von Dialogfeldern, einschließlich Meldungsfelder, Standarddialogfelder und benutzerdefinierte Dialogfelder erstellen.Windows Presentation Foundation (WPF) allows you to create several types of dialog boxes, including message boxes, common dialog boxes, and custom dialog boxes. In diesem Thema wird erläutert, und die Dialogfeldbeispiel stellt entsprechende Beispiele bereit.This topic discusses each, and the Dialog Box Sample provides matching examples.

MeldungsfelderMessage boxes

Ein Meldungsfeld ist ein Dialogfeld mit dem Textinformationen angezeigt und können Benutzer mithilfe von Schaltflächen Entscheidungen treffen werden kann.A message box is a dialog box that can be used to display textual information and to allow users to make decisions with buttons. In der folgenden Abbildung ist ein Meldungsfeld dargestellt, in dem Textinformationen angezeigt werden, eine Frage gestellt wird und der Benutzer mithilfe von drei Schaltflächen die Frage beantworten kann.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.

Schließt ein Dialogfeld gefragt, ob die Änderungen auf das Dokument vor der Anwendung gespeichert werden soll.

Um ein Meldungsfeld zu erstellen, verwenden Sie die MessageBox Klasse.To create a message box, you use the MessageBox class. MessageBox können Sie Text in Meldungsfeldern, Titel, Symbol und Schaltflächen, die mithilfe von Code wie folgt zu konfigurieren.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

Um ein Meldungsfeld anzuzeigen, rufen Sie die static Show -Methode, wie im folgenden Code gezeigt.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)

Wenn Code, der ein Meldungsfeld anzeigt, die Entscheidung des Benutzers (welche Schaltfläche angeklickt wurde) erkennen und verarbeiten muss, kann der Code das Ergebnis des Meldungsfelds überprüfen, wie im folgenden Code gezeigt.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

Weitere Informationen zur Verwendung von Meldungsfeldern finden Sie unter MessageBox, MessageBox-Beispiel, und Dialogfeldbeispiel.For more information on using message boxes, see MessageBox, MessageBox Sample, and Dialog Box Sample.

Obwohl MessageBox kann eine einfaches Dialogfeld benutzererfahrung mit Dialogfeldern, bietet den Vorteil bieten MessageBox ist, ist die einzige Art von Fenster, das von Anwendungen angezeigt werden kann, die in einer teilweise vertrauenswürdigen Sicherheits-Sandbox ausgeführt (finden Sie unter Sicherheit), wie z. B. XAML-Browseranwendungen (XAML browser applications; XBAPs)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-Browseranwendungen (XAML browser applications; XBAPs)XAML browser applications (XBAPs).

In den meisten Dialogfeldern werden komplexere Daten angezeigt und gesammelt als im Ergebnis eines Meldungsfelds. Dazu zählen Text, Auswahlmöglichkeiten (Kontrollkästchen), sich gegenseitig ausschließende Auswahlmöglichkeiten (Optionsfelder) und Auswahlmöglichkeiten in einer Liste (Listenfelder, Kombinationsfelder, Dropdown-Listenfelder).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). Für diese Windows Presentation Foundation (WPF) bietet mehrere häufig verwendete Dialogfelder und ermöglicht Ihnen, eigene Dialogfelder zu erstellen, obwohl die Verwendung beider auf Anwendungen, die mit voller Vertrauenswürdigkeit ausgeführt wird.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.

Häufig verwendete DialogfelderCommon dialog boxes

WindowsWindows implementiert eine Reihe von wiederverwendbaren Dialogfeldern, die für alle Anwendungen gleich sind. Dazu zählen Dialogfelder zum Öffnen und Speichern von Dateien und zum Drucken.implements a variety of reusable dialog boxes that are common to all applications, including dialog boxes for opening files, saving files, and printing. Da diese Dialogfelder durch das Betriebssystem implementiert werden, können sie von allen Anwendungen, die unter dem Betriebssystem ausgeführt werden, genutzt werden. Dies trägt zu einer konsistenten Benutzererfahrung bei: Wenn Benutzer mit der Verwendung eines durch das Betriebssystem bereitgestellten Dialogfelds in einer Anwendung vertraut sind, müssen Sie nicht lernen, wie sie dieses Dialogfeld in anderen Anwendungen verwenden.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. Da diese Dialogfelder allen Anwendungen zur Verfügung stehen, und sie bieten eine konsistente benutzererfahrung zu bieten, werden sie als bezeichnet Standarddialogfelder.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) kapselt die geöffnete Datei, speichern Sie die Datei, und Drucken der häufig verwendete Dialogfelder und macht sie als verwaltete Klassen für die Verwendung in eigenständigen Anwendungen verwenden.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. Dieses Thema enthält eine kurze Übersicht über die einzelnen Dialogfelder.This topic provides a brief overview of each.

Dialogfeld "Datei öffnen"Open File dialog

Das Dialogfeld „Datei öffnen“, das in der folgenden Abbildung gezeigt wird, wird von Funktionen zum Öffnen von Dateien verwendet, um den Namen einer zu öffnenden Datei abzurufen.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.

Ein Dialogfeld geöffnet, das die Position zum Abrufen der Datei.

Das Standarddialogfeld Datei öffnen, wird als implementiert die OpenFileDialog Klasse und befindet sich in der Microsoft.Win32 Namespace.The common open file dialog box is implemented as the OpenFileDialog class and is located in the Microsoft.Win32 namespace. Im folgenden Code wird gezeigt, wie ein solches Dialogfeld erstellt, konfiguriert und angezeigt und wie das Ergebnis verarbeitet wird.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

Weitere Informationen zu den im Dialogfeld Datei öffnen, finden Sie unter Microsoft.Win32.OpenFileDialog.For more information on the open file dialog box, see Microsoft.Win32.OpenFileDialog.

Hinweis

OpenFileDialog dienen zum sicher abrufen, die Namen von Anwendungen, die mit teilweiser Vertrauenswürdigkeit ausgeführt (finden Sie unter Sicherheit).OpenFileDialog can be used to safely retrieve file names by applications running with partial trust (see Security).

Datei speichern (Dialogfeld)Save File dialog box

Das Dialogfeld „Datei speichern“, das in der folgenden Abbildung gezeigt wird, wird von Funktionen zum Speichern von Dateien verwendet, um den Namen einer zu speichernden Datei abzurufen.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.

Ein Dialogfeld Speichern unter, die den Standort zum Speichern der Datei.

Das Standarddialogfeld speichern Datei wird als implementiert die SaveFileDialog Klasse, und befindet sich in der Microsoft.Win32 Namespace.The common save file dialog box is implemented as the SaveFileDialog class, and is located in the Microsoft.Win32 namespace. Im folgenden Code wird gezeigt, wie ein solches Dialogfeld erstellt, konfiguriert und angezeigt und wie das Ergebnis verarbeitet wird.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

Weitere Informationen zu speichern (Dialogfeld), finden Sie unter Microsoft.Win32.SaveFileDialog.For more information on the save file dialog box, see Microsoft.Win32.SaveFileDialog.

Das Dialogfeld „Drucken“, das in der folgenden Abbildung gezeigt wird, wird von Funktionen zum Drucken verwendet, um den Drucker auszuwählen und zu konfigurieren, auf dem der Benutzer Daten ausgeben möchte.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.

Screenshot, ein Druckdialogfeld zeigt.

Das Standarddialogfeld Drucken wird implementiert, als die PrintDialog Klasse, und befindet sich in der System.Windows.Controls Namespace.The common print dialog box is implemented as the PrintDialog class, and is located in the System.Windows.Controls namespace. Im folgenden Code wird gezeigt, wie ein solches Dialogfeld erstellt, konfiguriert und angezeigt wird.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

Klicken Sie im Dialogfeld "Drucken" auf Weitere Informationen finden Sie unter System.Windows.Controls.PrintDialog.For more information on the print dialog box, see System.Windows.Controls.PrintDialog. Ausführliche Informationen über das Drucken in WPF, finden Sie unter Übersicht über das Drucken.For detailed discussion of printing in WPF, see Printing Overview.

Benutzerdefinierte DialogfelderCustom dialog boxes

Obwohl Standarddialogfelder hilfreich sind und nach Möglichkeit verwendet werden sollten, unterstützen sie nicht die Anforderungen von domänenspezifischen Dialogfeldern.While common dialog boxes are useful, and should be used when possible, they do not support the requirements of domain-specific dialog boxes. In diesen Fällen müssen Sie eigene Dialogfelder erstellen.In these cases, you need to create your own dialog boxes. Wie später ersichtlich wird, ist ein Dialogfeld ein Fenster mit besonderen Verhaltensweisen.As we'll see, a dialog box is a window with special behaviors. Window implementiert jene Verhaltensweisen und infolgedessen verwenden Sie das Window um benutzerdefinierte modale und nicht modale Dialogfelder zu erstellen.Window implements those behaviors and, consequently, you use Window to create custom modal and modeless dialog boxes.

Erstellen einen modalen benutzerdefinierten DialogfeldsCreating a modal custom dialog box

In diesem Thema wird gezeigt, wie Sie mit Window eine typische modale dialogfeldimplementierung zu erstellen. mit der Margins Dialogfeld als Beispiel (finden Sie unter Dialogfeldbeispiel).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). Die Margins Dialogfeld wird in der folgenden Abbildung dargestellt.The Margins dialog box is shown in the following figure.

Ein Dialogfeld Ränder mit Feldern zum linken Rand, Oberer Rand, der rechte Rand und der untere Rand zu definieren.

Konfigurieren eines modalen DialogfeldsConfiguring a modal dialog box

Die Benutzeroberfläche für ein normales Dialogfeld enthält Folgendes:The user interface for a typical dialog box includes the following:

  • Die verschiedenen Steuerelemente, die zum Erfassen der gewünschten Daten erforderlich sind.The various controls that are required to gather the desired data.

  • Ein OK Schaltfläche, durch die Benutzer klicken, um das Schließen des Dialogfelds, das an die Funktion zurück und setzt die Verarbeitung fort.An OK button that users click to close the dialog box, return to the function, and continue processing.

  • Ein Abbrechen Schaltfläche, die Benutzer klicken, um das Dialogfeld schließen und die Funktion die weitere Verarbeitung zu beenden.A Cancel button that users click to close the dialog box and stop the function from further processing.

  • Ein schließen Schaltfläche in der Titelleiste angezeigt.A Close button in the title bar.

  • SymbolAn icon.

  • Minimieren Sie, Maximieren, und wiederherstellen Schaltflächen.Minimize, Maximize, and Restore buttons.

  • Ein System Menü zu minimieren, maximieren, wiederherstellen und das Dialogfeld zu schließen.A System menu to minimize, maximize, restore, and close the dialog box.

  • Eine Position nach oben und in der Mitte des Fensters, das das Dialogfeld geöffnet.A position above and in the center of the window that opened the dialog box.

  • Die Fähigkeit, deren Größe geändert werden, wenn möglich, um zu verhindern, dass Sie das Dialogfeld zu klein ist, und klicken Sie auf dem Benutzer eine sinnvolle Standardgröße bereitzustellen.The ability to be resized where possible to prevent the dialog box from being too small, and to provide the user with a useful default size. Dies erfordert, dass Sie sowohl die Standard-als auch einen minimalen Abmessungen festlegen.This requires that you set both the default and a minimum dimensions.

  • Die ESC-Taste als Tastenkombination, die bewirkt, dass die Abbrechen Schaltfläche gedrückt wird.The ESC key as a keyboard shortcut that causes the Cancel button to be pressed. Diesem Zweck legen die IsCancel Eigenschaft der Abbrechen Schaltfläche true.You do this by setting the IsCancel property of the Cancel button to true.

  • Die EINGABETASTE (oder RÜCKGABE)-Taste als Tastenkombination, die bewirkt, dass die OK Schaltfläche gedrückt wird.The ENTER (or RETURN) key as a keyboard shortcut that causes the OK button to be pressed. Sie tun dies durch Festlegen der IsDefault Eigenschaft der OK Schaltfläche true.You do this by setting the IsDefault property of the OK button true.

Im folgenden Code wird diese Konfiguration veranschaulicht.The following code demonstrates this configuration.

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.MarginsDialogBox"
    xmlns:local="clr-namespace:SDKSample"
    Title="Margins"
    Height="190"
    Width="300"
    MinHeight="10"
    MinWidth="300"
    ResizeMode="CanResizeWithGrip"
    ShowInTaskbar="False"
    WindowStartupLocation="CenterOwner" 
    FocusManager.FocusedElement="{Binding ElementName=leftMarginTextBox}">

  <Grid>
    <!-- Accept or Cancel -->
    <StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="4">
      <Button Name="okButton" Click="okButton_Click" IsDefault="True">OK</Button>
      <Button Name="cancelButton" IsCancel="True">Cancel</Button>
    </StackPanel>
  </Grid >
</Window>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace SDKSample
{
    public partial class MarginsDialogBox : Window
    {
        public MarginsDialogBox()
        {
            InitializeComponent();
        }
    }
}
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input

Namespace SDKSample
    Public Class MarginsDialogBox
        Inherits Window

        Public Sub New()
            Me.InitializeComponent()
        End Sub
    End Class
End Namespace

Die Benutzererfahrung eines Dialogfelds setzt sich auch in der Menüleiste des Fensters fort, das das Dialogfeld öffnet.The user experience for a dialog box also extends into the menu bar of the window that opens the dialog box. Wenn ein Menüelement eine Funktion ausführt, die eine Benutzerinteraktion über ein Dialogfeld benötigt, bevor die Funktion fortfahren kann, weist das Menüelement für die Funktion Auslassungszeichen im Header auf, wie nachfolgend gezeigt.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.

<!--Main Window-->
<MenuItem Name="formatMarginsMenuItem" Header="_Margins..." Click="formatMarginsMenuItem_Click" />

Wenn ein Menüelement eine Funktion ausführt, die ein Dialogfeld anzeigt, das ohne Benutzerinteraktion auskommt, z. B. das Dialogfeld „Info“, werden die Auslassungszeichen nicht benötigt.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.

Öffnen eines modalen DialogfeldsOpening a modal dialog box

Ein Dialogfeld wird üblicherweise als Ergebnis des Vorgangs angezeigt, bei dem ein Benutzer ein Menüelement auswählt, um eine domänenspezifische Funktion auszuführen, z. B. das Festlegen der Ränder eines Dokuments in einem Textverarbeitungsprogramm.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. Das Anzeigen eines Fensters als Dialogfeld ähnelt dem Anzeigen eines normalen Fensters, benötigt jedoch eine zusätzliche dialogfeldspezifische Konfiguration.Showing a window as a dialog box is similar to showing a normal window, although it requires additional dialog box-specific configuration. Der vollständige Vorgang des Instanziierens, Konfigurierens und Öffnens eines Dialogfelds wird im folgenden Code gezeigt.The entire process of instantiating, configuring, and opening a dialog box is shown in the following code.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;

namespace SDKSample
{
    public partial class MainWindow : Window
    {
        bool needsToBeSaved;
        void formatMarginsMenuItem_Click(object sender, RoutedEventArgs e)
        {
            // Instantiate the dialog box
            MarginsDialogBox dlg = new MarginsDialogBox();

            // Configure the dialog box
            dlg.Owner = this;
            dlg.DocumentMargin = this.documentTextBox.Margin;

            // Open the dialog box modally 
            dlg.ShowDialog();
        }
    }
}
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports Microsoft.Win32

Namespace SDKSample
    Public Class MainWindow
        Inherits Window
        
        Private Sub formatMarginsMenuItem_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Instantiate the dialog box
            Dim dlg As New MarginsDialogBox

            ' Configure the dialog box
            dlg.Owner = Me
            dlg.DocumentMargin = Me.documentTextBox.Margin

            ' Open the dialog box modally 
            dlg.ShowDialog()
        End Sub
    End Class
End Namespace

Hier wird im Code Standardinformationen (die aktuellen Ränder), um das Dialogfeld.Here, the code passes default information (the current margins) to the dialog box. Außerdem wird die Window.Owner Eigenschaft mit einem Verweis auf das Fenster, das das Dialogfeld angezeigt wird.It also sets the Window.Owner property with a reference to the window that is showing the dialog box. Im Allgemeinen sollten Sie immer den Besitzer für ein Dialogfeld, Fenster Status Verhalten bereitzustellen, die für alle Dialogfelder gelten festlegen (siehe Übersicht über WPF-Windows für Weitere Informationen).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).

Hinweis

Sie müssen einen Besitzer für die Unterstützung von Benutzer-Benutzeroberfläche (UI)-Automatisierung für Dialogfelder bereitstellen (siehe UI Automation Overview).You must provide an owner to support user interface (UI) automation for dialog boxes (see UI Automation Overview).

Nachdem Sie das Dialogfeld konfiguriert ist, wird es modal angezeigt werden, durch den Aufruf der ShowDialog Methode.After the dialog box is configured, it is shown modally by calling the ShowDialog method.

Überprüfen von vom Benutzer bereitgestellte DatenValidating user-provided data

Wenn ein Dialogfeld geöffnet wird und der Benutzer die benötigten Daten zur Verfügung stellt, ist ein Dialogfeld aus folgenden Gründen dafür verantwortlich, dass die bereitgestellten Daten gültig sind: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:

  • Aus Gründen der Datensicherheit sollten alle Eingaben überprüft werden.From a security perspective, all input should be validated.

  • Aus domänenspezifischer Sicht verhindert die Datenvalidierung, dass fehlerhafte Daten vom Code verarbeitet werden, was zum Auslösen von Ausnahmen führen kann.From a domain-specific perspective, data validation prevents erroneous data from being processed by the code, which could potentially throw exceptions.

  • Aus Gründen der Benutzererfahrung kann ein Dialogfeld dazu beitragen, Benutzern zu helfen, indem ihnen gezeigt wird, welche der von ihnen eingegebenen Daten ungültig sind.From a user-experience perspective, a dialog box can help users by showing them which data they have entered is invalid.

  • Unter Leistungsaspekten betrachtet, kann die Datenvalidierung in einer Anwendung mit mehreren Ebenen die Anzahl von Roundtrips zwischen der Client- und der Anwendungsebene vermindern, insbesondere, wenn die Anwendung aus Webdiensten oder serverbasierten Datenbanken besteht.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.

Um ein gebundenes Steuerelement in WPF zu überprüfen, müssen Sie eine Validierungsregel definieren und die Bindung zuordnen.To validate a bound control in WPF, you need to define a validation rule and associate it with the binding. Eine Validierungsregel ist eine benutzerdefinierte abgeleitete Klasse ValidationRule.A validation rule is a custom class that derives from ValidationRule. Das folgende Beispiel zeigt eine Validierungsregel MarginValidationRule, der überprüft werden, die ein gebundener Wert ist eine Double und innerhalb eines bestimmten Bereichs ist.The following example shows a validation rule, MarginValidationRule, which checks that a bound value is a Double and is within a specified range.

using System.Globalization;
using System.Windows.Controls;

namespace SDKSample
{
    public class MarginValidationRule : ValidationRule
    {
        double minMargin;
        double maxMargin;

        public double MinMargin
        {
            get { return this.minMargin; }
            set { this.minMargin = value; }
        }

        public double MaxMargin
        {
            get { return this.maxMargin; }
            set { this.maxMargin = value; }
        }

        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            double margin;

            // Is a number?
            if (!double.TryParse((string)value, out margin))
            {
                return new ValidationResult(false, "Not a number.");
            }

            // Is in range?
            if ((margin < this.minMargin) || (margin > this.maxMargin))
            {
                string msg = string.Format("Margin must be between {0} and {1}.", this.minMargin, this.maxMargin);
                return new ValidationResult(false, msg);
            }

            // Number is valid
            return new ValidationResult(true, null);
        }
    }
}
Imports System.Globalization
Imports System.Windows.Controls

Namespace SDKSample
    Public Class MarginValidationRule
        Inherits ValidationRule

        Private _maxMargin As Double
        Private _minMargin As Double

        Public Property MaxMargin() As Double
            Get
                Return Me._maxMargin
            End Get
            Set(ByVal value As Double)
                Me._maxMargin = value
            End Set
        End Property

        Public Property MinMargin() As Double
            Get
                Return Me._minMargin
            End Get
            Set(ByVal value As Double)
                Me._minMargin = value
            End Set
        End Property

        Public Overrides Function Validate(ByVal value As Object, ByVal cultureInfo As CultureInfo) As ValidationResult
            Dim margin As Double

            ' Is a number?
            If Not Double.TryParse(CStr(value), margin) Then
                Return New ValidationResult(False, "Not a number.")
            End If

            ' Is in range?
            If ((margin < Me.MinMargin) OrElse (margin > Me.MaxMargin)) Then
                Dim msg As String = String.Format("Margin must be between {0} and {1}.", Me.MinMargin, Me.MaxMargin)
                Return New ValidationResult(False, msg)
            End If

            ' Number is valid
            Return New ValidationResult(True, Nothing)
        End Function
    End Class
End Namespace

In diesem Code wird die Validierungslogik einer Validierungsregel durch Überschreiben implementiert die Validate -Methode, die die Daten überprüft und gibt eine entsprechende 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.

Um die Validierungsregel dem gebundenen Steuerelement zuzuordnen, wird das folgende Markup verwendet.To associate the validation rule with the bound control, you use the following markup.

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.MarginsDialogBox"
    xmlns:local="clr-namespace:SDKSample"
    Title="Margins"
    Height="190"
    Width="300"
    MinHeight="10"
    MinWidth="300"
    ResizeMode="CanResizeWithGrip"
    ShowInTaskbar="False"
    WindowStartupLocation="CenterOwner" 
    FocusManager.FocusedElement="{Binding ElementName=leftMarginTextBox}">

  <Grid>

    <!-- Left Margin -->
    <Label Grid.Column="0" Grid.Row="0">Left Margin:</Label>
    <TextBox Name="leftMarginTextBox" Grid.Column="1" Grid.Row="0">
      <TextBox.Text>
        <Binding Path="Left" UpdateSourceTrigger="PropertyChanged">
          <Binding.ValidationRules>
            <local:MarginValidationRule MinMargin="0" MaxMargin="10" />
          </Binding.ValidationRules>
        </Binding>
      </TextBox.Text>
    </TextBox>
  </Grid >
</Window>

Nachdem die Validierungsregel zugeordnet ist, wird dieses durch die WPF automatisch angewendet, wenn Daten in das gebundene Steuerelement eingegeben werden.Once the validation rule is associated, WPF will automatically apply it when data is entered into the bound control. Wenn ein Steuerelement ungültige Daten enthält, wird WPF einen roten Rahmen um das ungültige Steuerelement angezeigt, wie in der folgenden Abbildung dargestellt.When a control contains invalid data, WPF will display a red border around the invalid control, as shown in the following figure.

Ein Dialogfeld Ränder mit einem roten Rahmen um den Wert Ungültiger Linker Rand.

WPF schränkt keinen Benutzer auf das ungültige Steuerelement, bis sie gültige Daten eingegeben haben.WPF does not restrict a user to the invalid control until they have entered valid data. Das wird als gutes Verhalten für ein Dialogfeld verstanden: Benutzer sollten in einem Dialogfeld frei durch die Steuerelemente navigieren können, unabhängig davon, ob die Daten gültig sind.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. Dies bedeutet jedoch ein Benutzer eingeben kann ungültige Daten, und drücken Sie die OK Schaltfläche.However, this means a user can enter invalid data and press the OK button. Aus diesem Grund müssen vom Code auch zum Validieren aller Steuerelemente in einem Dialogfeld Feld, wenn die OK gedrückt wird durch Behandeln der Click Ereignis.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.

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace SDKSample
{
    public partial class MarginsDialogBox : Window
    {
        void okButton_Click(object sender, RoutedEventArgs e)
        {
            // Don't accept the dialog box if there is invalid data
            if (!IsValid(this)) return;
        }

        // Validate all dependency objects in a window
        bool IsValid(DependencyObject node)
        {
            // Check if dependency object was passed
            if (node != null)
            {
                // Check if dependency object is valid.
                // NOTE: Validation.GetHasError works for controls that have validation rules attached 
                bool isValid = !Validation.GetHasError(node);
                if (!isValid)
                {
                    // If the dependency object is invalid, and it can receive the focus,
                    // set the focus
                    if (node is IInputElement) Keyboard.Focus((IInputElement)node);
                    return false;
                }
            }

            // If this dependency object is valid, check all child dependency objects
            foreach (object subnode in LogicalTreeHelper.GetChildren(node))
            {
                if (subnode is DependencyObject)
                {   
                    // If a child dependency object is invalid, return false immediately,
                    // otherwise keep checking
                    if (IsValid((DependencyObject)subnode) == false) return false;
                }
            }

            // All dependency objects are valid
            return true;
        }
    }
}
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input

Namespace SDKSample
    Public Class MarginsDialogBox
        Inherits Window

        Private Sub okButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Don't accept the dialog box if there is invalid data
            If Not Me.IsValid(Me) Then Return
        End Sub

        ' Validate all dependency objects in a window
        Private Function IsValid(ByVal node As DependencyObject) As Boolean
            ' Check if dependency object was passed and if dependency object is valid.
            ' NOTE: Validation.GetHasError works for controls that have validation rules attached 
            If ((Not node Is Nothing) AndAlso Validation.GetHasError(node)) Then
                ' If the dependency object is invalid, and it can receive the focus,
                ' set the focus
                If TypeOf node Is IInputElement Then
                    Keyboard.Focus(DirectCast(node, IInputElement))
                End If
                Return False
            End If

            ' If this dependency object is valid, check all child dependency objects
            Dim subnode As Object
            For Each subnode In LogicalTreeHelper.GetChildren(node)
                If (TypeOf subnode Is DependencyObject AndAlso Not Me.IsValid(DirectCast(subnode, DependencyObject))) Then
                    ' If a child dependency object is invalid, return false immediately,
                    ' otherwise keep checking
                    Return False
                End If
            Next

            ' All dependency objects are valid
            Return True
        End Function
    End Class
End Namespace

Dieser Code Listet alle Abhängigkeitsobjekte in einem Fenster und, falls ungültige (wie vom GetHasError, erhält das ungültige Steuerelement den Fokus erhält, die IsValid Methodenrückgabe false, und das Fenster wird als ungültig angesehen.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.

Sobald ein Dialogfeld gültig ist, kann es sicher geschlossen und zurückgegeben werden.Once a dialog box is valid, it can safely close and return. Als Teil des Rückgabevorgangs muss es ein Ergebnis an die aufrufende Funktion zurückgeben.As part of the return process, it needs to return a result to the calling function.

Festlegen des modalen DialogergebnissesSetting the modal dialog result

Öffnen eines Dialogfelds mithilfe ShowDialog entspricht im Wesentlichen dem Aufrufen einer Methode: der Code, der Öffnen des Dialogfelds mit ShowDialog wartet, bis ShowDialog zurückgibt.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. Wenn ShowDialog gibt, wird der Code, die diese Anforderungen aufgerufen, zu entscheiden, ob die Verarbeitung fortgesetzt oder abgebrochen wird, basierend auf vom Benutzer gedrückten der OK Schaltfläche oder die Abbrechen Schaltfläche.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. Um diese Entscheidung zu erleichtern, muss das Dialogfeld die Auswahl des Benutzers als Zurückgeben einer Boolean aus zurückgegebene Wert die ShowDialog Methode.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.

Wenn die OK Schaltfläche geklickt wird, ShowDialog sollte zurückgeben true.When the OK button is clicked, ShowDialog should return true. Dies wird erreicht, indem die DialogResult Eigenschaft im Dialogfeld im Feld, wenn die OK geklickt wird.This is achieved by setting the DialogResult property of the dialog box when the OK button is clicked.

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace SDKSample
{
    public partial class MarginsDialogBox : Window
    {

        void okButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
        }
    }
}
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input

Namespace SDKSample
    Public Class MarginsDialogBox
        Inherits Window

        Private Sub okButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Dialog box accepted
            MyBase.DialogResult = New Nullable(Of Boolean)(True)
        End Sub
    End Class
End Namespace

Beachten Sie diese Einstellung die DialogResult Eigenschaft bewirkt auch, dass das Fenster automatisch geschlossen, die die explizit nicht aufgerufen werden muss Close.Note that setting the DialogResult property also causes the window to close automatically, which alleviates the need to explicitly call Close.

Wenn die Abbrechen Schaltfläche geklickt wird, ShowDialog sollte zurückgeben false, erfordert ebenfalls die Einstellung der DialogResult Eigenschaft.When the Cancel button is clicked, ShowDialog should return false, which also requires setting the DialogResult property.

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace SDKSample
{
    public partial class MarginsDialogBox : Window
    {

        void cancelButton_Click(object sender, RoutedEventArgs e)
        {
            // Dialog box canceled
            this.DialogResult = false;
        }
    }
}
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input

Namespace SDKSample
    Public Class MarginsDialogBox
        Inherits Window

        Private Sub cancelButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Dialog box canceled
            Me.DialogResult = False
        End Sub
    End Class
End Namespace

Beim Klicken auf einer Schaltfläche des IsCancel -Eigenschaftensatz auf true und der Benutzer drückt die Abbrechen Schaltfläche oder die ESC-Taste, DialogResult wird automatisch festgelegt, um 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. Das folgende Markup hat dieselbe Wirkung wie der vorhergehende Code, ohne die Notwendigkeit, behandeln die Click Ereignis.The following markup has the same effect as the preceding code, without the need to handle the Click event.

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

Ein Dialogfeld gibt automatisch zurück false Wenn ein Benutzer drückt die schließen Schaltfläche in der Titelleiste an oder wählt die schließen Menüelement der System Menü.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.

Verarbeiten von Daten, die von einem modalen Dialogfeld zurückgegeben werden.Processing data returned from a modal dialog box

Wenn DialogResult festgelegt ist von einem Dialogfeld kann die Funktion, die es geöffnet das Dialogfeldergebnis abrufen, indem Sie überprüfen die DialogResult Eigenschaft beim ShowDialog zurückgibt.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.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;

namespace SDKSample
{
    public partial class MainWindow : Window
    {

        void formatMarginsMenuItem_Click(object sender, RoutedEventArgs e)
        {

            // Process data entered by user if dialog box is accepted
            if (dlg.DialogResult == true)
            {
                // Update fonts
                this.documentTextBox.Margin = dlg.DocumentMargin;
            }
        }
    }
}
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports Microsoft.Win32

Namespace SDKSample
    Public Class MainWindow
        Inherits Window
        
        Private Sub formatMarginsMenuItem_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Process data entered by user if dialog box is accepted
            If (dlg.DialogResult.GetValueOrDefault = True) Then
                Me.documentTextBox.Margin = dlg.DocumentMargin
            End If
        End Sub
    End Class
End Namespace

Wenn das Dialogergebnis true, die Funktion verwendet, die als Hinweis zum Abrufen und verarbeiten, die vom Benutzer bereitgestellten Daten.If the dialog result is true, the function uses that as a cue to retrieve and process the data provided by the user.

Hinweis

Nach dem ShowDialog zurückgegeben wurde, wird ein Dialogfeld kann nicht erneut geöffnet werden.After ShowDialog has returned, a dialog box cannot be reopened. Stattdessen müssen Sie eine neue Instanz erstellen.Instead, you need to create a new instance.

Wenn das Dialogergebnis false, sollte die Funktion die Verarbeitung entsprechend beenden.If the dialog result is false, the function should end processing appropriately.

Erstellen eines nicht modalen benutzerdefinierten DialogfeldsCreating a modeless custom dialog box

Ein nicht modales Dialogfeld, z. B. das in der folgenden Abbildung dargestellte Dialogfeld „Suchen“, besitzt dasselbe grundlegende Aussehen wie das modale Dialogfeld.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.

Screenshot mit einem Dialogfeld Suchen.

Allerdings ist das Verhalten etwas anders, wie in den folgenden Abschnitten beschrieben wird.However, the behavior is slightly different, as described in the following sections.

Ein nicht modales Dialogfeld ÖffnenOpening a modeless dialog box

Ein nicht modales Dialogfeld geöffnet wird, durch den Aufruf der Show Methode.A modeless dialog box is opened by calling the Show method.

<!--Main Window-->
<MenuItem Name="editFindMenuItem" Header="_Find" InputGestureText="Ctrl+F" Click="editFindMenuItem_Click" />
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;

namespace SDKSample
{
    public partial class MainWindow : Window
    {
        void editFindMenuItem_Click(object sender, RoutedEventArgs e)
        {
            // Instantiate the dialog box
            FindDialogBox dlg = new FindDialogBox(this.documentTextBox);

            // Configure the dialog box
            dlg.Owner = this;
            dlg.TextFound += new TextFoundEventHandler(dlg_TextFound);

            // Open the dialog box modally
            dlg.Show();
        }
    }
}
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports Microsoft.Win32

Namespace SDKSample
    Public Class MainWindow
        Inherits Window
        
        Private Sub editFindMenuItem_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Dim dlg As New FindDialogBox(Me.documentTextBox)
            dlg.Owner = Me
            AddHandler dlg.TextFound, New TextFoundEventHandler(AddressOf Me.dlg_TextFound)
            dlg.Show()
        End Sub
    End Class
End Namespace

Im Gegensatz zu ShowDialog, Show kehrt sofort zurück.Unlike ShowDialog, Show returns immediately. Dementsprechend kann das aufrufende Fenster nicht erkennen, wann das nicht modale Dialogfeld geschlossen wird, und weiß deshalb auch nicht, wann es ein Dialogfeldergebnis überprüfen oder Daten vom Dialogfeld zur weiteren Verarbeitung abrufen soll.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. Stattdessen muss vom Dialogfeld eine andere Möglichkeit erstellt werden, um Daten an das aufrufende Fenster zur Verarbeitung zurückzugeben.Instead, the dialog box needs to create an alternative way to return data to the calling window for processing.

Verarbeiten von Daten, die von einem nicht modalen Dialogfeld zurückgegeben werden.Processing data returned from a modeless dialog box

In diesem Beispiel die FindDialogBox kann eine oder mehrere Suchergebnisse an das Hauptfenster, je nach dem Suchtext ohne besondere Häufigkeit zurückgeben kann.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. Wie ein modales Dialogfeld kann auch ein nicht modales Dialogfeld Ergebnisse mithilfe von Eigenschaften zurückgeben.As with a modal dialog box, a modeless dialog box can return results using properties. Das Fenster, das Besitzer des Dialogfelds ist, muss jedoch wissen, wann es diese Eigenschaften überprüfen soll.However, the window that owns the dialog box needs to know when to check those properties. Diese Funktionalität kann z. B. dadurch aktiviert werden, dass das Dialogfeld ein Ereignis implementiert, das jedes Mal ausgelöst wird, wenn Text gefunden wird.One way to enable this is for the dialog box to implement an event that is raised whenever text is found. FindDialogBox implementiert die TextFoundEvent zu diesem Zweck der zuerst ein Delegat erforderlich ist.FindDialogBox implements the TextFoundEvent for this purpose, which first requires a delegate.

using System;

namespace SDKSample
{
    public delegate void TextFoundEventHandler(object sender, EventArgs e);
}
Namespace SDKSample
   Public Delegate Sub TextFoundEventHandler(ByVal sender As Object, ByVal e As EventArgs)
End Namespace

Mithilfe der TextFoundEventHandler zu delegieren, FindDialogBox implementiert die TextFoundEvent.Using the TextFoundEventHandler delegate, FindDialogBox implements the TextFoundEvent.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Text.RegularExpressions;

namespace SDKSample
{
    public partial class FindDialogBox : Window
    {
        public event TextFoundEventHandler TextFound;
        
        protected virtual void OnTextFound()
        {
            TextFoundEventHandler textFound = this.TextFound;
            if (textFound != null) textFound(this, EventArgs.Empty);
        }

    }
}
Imports System.Windows
Imports System.Windows.Controls
Imports System.Text.RegularExpressions

Namespace SDKSample

    Public Class FindDialogBox
        Inherits Window

        Public Event TextFound As TextFoundEventHandler

        Protected Overridable Sub OnTextFound()
            RaiseEvent TextFound(Me, EventArgs.Empty)
        End Sub

    End Class
End Namespace

Folglich Find können Auslösen des Ereignisses, wenn ein Suchergebnis gefunden wird.Consequently, Find can raise the event when a search result is found.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Text.RegularExpressions;

namespace SDKSample
{
    public partial class FindDialogBox : Window
    {

        void findNextButton_Click(object sender, RoutedEventArgs e)
        {
                // Text found
                this.index = match.Index;
                this.length = match.Length;
                OnTextFound();
        }
    }
}
Imports System.Windows
Imports System.Windows.Controls
Imports System.Text.RegularExpressions

Namespace SDKSample

    Public Class FindDialogBox
        Inherits Window



            Me.Index = match.Index
            Me.Length = match.Length
            RaiseEvent TextFound(Me, EventArgs.Empty)

    End Class
End Namespace

Das Besitzerfenster muss anschließend bei diesem Ereignis registriert werden und es behandeln.The owner window then needs to register with and handle this event.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;

namespace SDKSample
{
    public partial class MainWindow : Window
    {

        void dlg_TextFound(object sender, EventArgs e)
        {
            // Get the find dialog box that raised the event
            FindDialogBox dlg = (FindDialogBox)sender;

            // Get find results and select found text
            this.documentTextBox.Select(dlg.Index, dlg.Length);
            this.documentTextBox.Focus();
        }
    }
}
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports Microsoft.Win32

Namespace SDKSample
    Public Class MainWindow
        Inherits Window
        
        Private Sub dlg_TextFound(ByVal sender As Object, ByVal e As EventArgs)
            Dim dlg As FindDialogBox = DirectCast(sender, FindDialogBox)
            Me.documentTextBox.Select(dlg.Index, dlg.Length)
            Me.documentTextBox.Focus()
        End Sub
    End Class
End Namespace

Ein nicht modales Dialogfeld schließenClosing a modeless dialog box

Da DialogResult muss nicht festgelegt werden kann, ein nicht modales Dialogfeld kann geschlossen werden, mithilfe von System bieten Mechanismen, einschließlich der folgenden:Because DialogResult does not need to be set, a modeless dialog can be closed using system provide mechanisms, including the following:

  • Klicken auf die schließen Schaltfläche in der Titelleiste angezeigt.Clicking the Close button in the title bar.

  • Drücken von ALT+F4.Pressing ALT+F4.

  • Auswahl schließen aus der System Menü.Choosing Close from the System menu.

Sie können auch Ihren Code Aufrufen Close bei der schließen geklickt wird.Alternatively, your code can call Close when the Close button is clicked.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Text.RegularExpressions;

namespace SDKSample
{
    public partial class FindDialogBox : Window
    {

        void closeButton_Click(object sender, RoutedEventArgs e)
        {
            // Close dialog box
            this.Close();
        }
    }
}
Imports System.Windows
Imports System.Windows.Controls
Imports System.Text.RegularExpressions

Namespace SDKSample

    Public Class FindDialogBox
        Inherits Window

        Private Sub closeButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
            MyBase.Close()
        End Sub
    End Class
End Namespace

Siehe auchSee also