Comment : ouvrir un fichier qui est déplacé dans un contrôle RichTextBox
Dans Windows Presentation Foundation (WPF), les TextBoxcontrôles et FlowDocument les RichTextBoxcontrôles ont toutes des fonctionnalités intégrées de glisser-déplacer. La fonctionnalité intégrée permet de glisser-déplacer du texte entre les contrôles et les glisser-déplacer. Toutefois, il n’active pas l’ouverture d’un fichier en supprimant le fichier sur le contrôle. Ces contrôles marquent également les événements de glisser-déplacer comme gérés. Par conséquent, par défaut, vous ne pouvez pas ajouter vos propres gestionnaires d’événements pour fournir des fonctionnalités permettant d’ouvrir des fichiers supprimés.
Pour ajouter une gestion supplémentaire des événements glisser-déplacer dans ces contrôles, utilisez la AddHandler(RoutedEvent, Delegate, Boolean) méthode pour ajouter vos gestionnaires d’événements pour les événements glisser-déplacer. Définissez le handledEventsToo
paramètre pour true
que le gestionnaire spécifié soit appelé pour un événement routé qui a déjà été marqué comme géré par un autre élément le long de l’itinéraire d’événement.
Conseil
Vous pouvez remplacer la fonctionnalité de glisser-déplacer intégrée de TextBox, RichTextBoxet FlowDocument en gérant les versions d’aperçu des événements glisser-déplacer et en marquant les événements d’aperçu comme gérés. Toutefois, cela désactive la fonctionnalité de glisser-déplacer intégrée et n’est pas recommandée.
Exemple
L’exemple suivant montre comment ajouter des gestionnaires pour les événements et Drop les DragOver événements sur un RichTextBox. Cet exemple utilise la AddHandler(RoutedEvent, Delegate, Boolean) méthode et définit le handledEventsToo
paramètre pour true
que les gestionnaires d’événements soient appelés même si les RichTextBox marques de ces événements sont gérées. Le code dans les gestionnaires d’événements ajoute des fonctionnalités pour ouvrir un fichier texte supprimé sur le RichTextBox.
Pour tester cet exemple, faites glisser un fichier texte ou un fichier RTF (Rich Text Format) de l’Explorateur Windows vers l’explorateur RichTextBox. Le fichier est ouvert dans le RichTextBoxfichier . Si vous appuyez sur la touche Maj avant de supprimer le fichier, le fichier est ouvert sous forme de texte brut.
<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
.NET Desktop feedback