Delen via


Procedure: Een bestand openen dat is neergezet op een RichTextBox-veld

In Windows Presentation Foundation (WPF) hebben de TextBox, RichTextBoxen FlowDocument allemaal ingebouwde functionaliteit voor slepen en neerzetten. Met de ingebouwde functionaliteit kunt u tekst slepen en neerzetten binnen en tussen de besturingselementen. Het is echter niet mogelijk om een bestand te openen door het op de bediening te slepen en neer te laten. Met deze elementen worden ook de gebeurtenissen voor slepen en neerzetten als afgehandeld gemarkeerd. Als gevolg hiervan kunt u standaard uw eigen gebeurtenis-handlers niet toevoegen om functionaliteit te bieden voor het openen van verwijderde bestanden.

Als u extra verwerking wilt toevoegen voor slepen en neerzetten in deze besturingselementen, gebruik methode AddHandler(RoutedEvent, Delegate, Boolean) om uw event handlers toe te voegen voor de gebeurtenissen voor slepen en neerzetten. Stel de parameter handledEventsToo in op true om ervoor te zorgen dat de opgegeven handler wordt aangeroepen voor een gerouteerde gebeurtenis die al is gemarkeerd als verwerkt door een ander element langs de gebeurtenisroute.

Tip

U kunt de ingebouwde functionaliteit voor slepen en neerzetten van TextBox, RichTextBoxen FlowDocument vervangen door het verwerken van de voorbeeldversies van de sleep-en-neerzet-gebeurtenissen en de voorbeeldgebeurtenissen als verwerkt te markeren. Hierdoor wordt echter de ingebouwde functionaliteit voor slepen en neerzetten uitgeschakeld en wordt dit niet aanbevolen.

Voorbeeld

In het volgende voorbeeld ziet u hoe u handlers toevoegt voor de DragOver- en Drop-gebeurtenissen op een RichTextBox. In dit voorbeeld wordt de methode AddHandler(RoutedEvent, Delegate, Boolean) gebruikt en wordt de parameter handledEventsToo ingesteld op true, zodat de gebeurtenis-handlers worden aangeroepen, ook al worden deze gebeurtenissen door de RichTextBox gemarkeerd als verwerkt. De code in de gebeurtenishandlers voegt functionaliteit toe om een tekstbestand te openen dat op de RichTextBoxis neergezet.

Als u dit voorbeeld wilt testen, sleept u een tekstbestand of rtf-bestand (RTF) van Windows Verkenner naar het RichTextBox. Het bestand wordt geopend in de RichTextBox. Als u op Shift drukt voordat u het bestand neerlegt, wordt het bestand geopend als tekst zonder opmaak.

<RichTextBox x:Name="richTextBox1"
             AllowDrop="True" />
public MainWindow()
{
    InitializeComponent();

    // Add using System.Windows.Controls;
    richTextBox1.AddHandler(RichTextBox.DragOverEvent, new DragEventHandler(RichTextBox_DragOver), true);
    richTextBox1.AddHandler(RichTextBox.DropEvent, new DragEventHandler(RichTextBox_Drop), true);
}

private void RichTextBox_DragOver(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effects = DragDropEffects.All;
    }
    else
    {
        e.Effects = DragDropEffects.None;
    }
    e.Handled = false;
}

private void RichTextBox_Drop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        string[] docPath = (string[])e.Data.GetData(DataFormats.FileDrop);

        // By default, open as Rich Text (RTF).
        var dataFormat = DataFormats.Rtf;

        // If the Shift key is pressed, open as plain text.
        if (e.KeyStates == DragDropKeyStates.ShiftKey)
        {
            dataFormat = DataFormats.Text;
        }

        System.Windows.Documents.TextRange range;
        System.IO.FileStream fStream;
        if (System.IO.File.Exists(docPath[0]))
        {
            try
            {
                // Open the document in the RichTextBox.
                range = new System.Windows.Documents.TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd);
                fStream = new System.IO.FileStream(docPath[0], System.IO.FileMode.OpenOrCreate);
                range.Load(fStream, dataFormat);
                fStream.Close();
            }
            catch (System.Exception)
            {
                MessageBox.Show("File could not be opened. Make sure the file is a text file.");
            }
        }
    }
}
Public Sub New()
    InitializeComponent()

    richTextBox1.AddHandler(RichTextBox.DragOverEvent, New DragEventHandler(AddressOf RichTextBox_DragOver), True)
    richTextBox1.AddHandler(RichTextBox.DropEvent, New DragEventHandler(AddressOf RichTextBox_Drop), True)

End Sub

Private Sub RichTextBox_DragOver(sender As Object, e As DragEventArgs)
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        e.Effects = DragDropEffects.All
    Else
        e.Effects = DragDropEffects.None
    End If
    e.Handled = False
End Sub

Private Sub RichTextBox_Drop(sender As Object, e As DragEventArgs)
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        Dim docPath As String() = TryCast(e.Data.GetData(DataFormats.FileDrop), String())

        ' By default, open as Rich Text (RTF).
        Dim dataFormat = DataFormats.Rtf

        ' If the Shift key is pressed, open as plain text.
        If e.KeyStates = DragDropKeyStates.ShiftKey Then
            dataFormat = DataFormats.Text
        End If

        Dim range As TextRange
        Dim fStream As IO.FileStream
        If IO.File.Exists(docPath(0)) Then
            Try
                ' Open the document in the RichTextBox.
                range = New TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd)
                fStream = New IO.FileStream(docPath(0), IO.FileMode.OpenOrCreate)
                range.Load(fStream, dataFormat)
                fStream.Close()
            Catch generatedExceptionName As System.Exception
                MessageBox.Show("File could not be opened. Make sure the file is a text file.")
            End Try
        End If
    End If
End Sub