Zuletzt aktualisiert am 13.06.2023 um 10:06 Uhr
Hier gibt es ein kleines Beispiel wie eine Datei, in diesem Fall eine Textdatei per Drag & Drop in die TextBox geöffnet werden kann. Den Code fand ich vor einiger Zeit im Netz. Im Prinzip wird jede Datei ohne weiteres eingelesen, aber als Empfehlung sind reine Textdateien als auch XML und vieles mehr, was normalen Text beinhaltet, besser. Es wurde .NET Core 3.1 verwendet, kann aber auch geändert werden.
Code für WPF, für WindowsForms gibt es ein extra Projekt unten als Download
WPF
MainWindow.xaml
<Window x:Class="WpfCsSimpleDragDropTextFile.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Basic Drag and Drop Text File into TextBox" Height="200" Width="450" MinWidth="450" MinHeight="200" WindowStartupLocation="CenterScreen" ResizeMode="CanResizeWithGrip">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<TextBox x:Name="TextBlockInput" Text="Drop text file here..." Grid.Row="0" IsReadOnly="True" PreviewDragOver="TextBlockInput_PreviewDragOver" DragEnter="TextBlockInput_DragEnter" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"/>
<TextBox x:Name="TextBlockFullPath" Text="Full Path" Grid.Row="1" IsReadOnly="True" HorizontalScrollBarVisibility="Visible" Margin="0,0,15,0" BorderThickness="0,0,0,0" />
</Grid>
</Window>
MainWindow.xaml.cs
using System.IO;
using System.Windows;
/* Re-created by AlexHaack (alexhaack.de) */
namespace WpfCsSimpleDragDropTextFile
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TextBlockInput.AllowDrop = true;
}
private void TextBlockInput_PreviewDragOver(object sender, DragEventArgs e)
{
try
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string filePath in files)
{
TextBlockInput.Text = File.ReadAllText(filePath);
TextBlockFullPath.Text = filePath.ToString();
}
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
private void TextBlockInput_DragEnter(object sender, DragEventArgs e)
{
try
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effects = DragDropEffects.Copy;
}
else
{
e.Effects = DragDropEffects.None;
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message,"Error",MessageBoxButton.OK,MessageBoxImage.Error);
}
}
}
}
WindowsForms
MainForm
Leider wird der Code vom Compiler in der MainForm.Designer.cs automatisch erstellt, von daher bitte im Beispielprojekt die Projektdatei in Visual Studio 2019 oder höher öffnen und MainForm öffnen, dort werden die Komponenten grafisch angezeigt.
MainForm.cs
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
/*
* Source code from:
* https://www.c-sharpcorner.com/blogs/drag-and-drop-file-on-windows-forms1
*
*/
namespace CsWindowsFormsSimpleDragDropTextFileDemo
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void TextDragDrop_DragOver(object sender, DragEventArgs e)
{
try
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Link;
else
e.Effect = DragDropEffects.None;
}
catch (Exception ex)
{
MessageBox.Show("Error message: " + Environment.NewLine + Environment.NewLine + ex.Message, "An error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void TextDragDrop_DragDrop(object sender, DragEventArgs e)
{
try
{
string[] files = e.Data.GetData(DataFormats.FileDrop) as string[]; // get all files droppeds
if (files != null && files.Any())
textBoxContentDragDrop.Text = File.ReadAllText(files.First()); // Read the content from the file
textBoxDragDropFilePath.Text = files.First(); //select the first one
}
catch (Exception ex)
{
MessageBox.Show("Error message: " + Environment.NewLine + Environment.NewLine + ex.Message, "An error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
Beispielprojekt zum Herunterladen
Zum Download die gesamte Projektdatei, die mittels Visual Studio 2019 Community geöffnet werden kann. Anbei auch die Demo, welche dieses Beispiel direkt öffnet.