C# WPF/WindowsForms: Textdatei in TextBox mit der Maus durch rein ziehen, öffnen

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.

WPF-Variante

[wpdm_package id=’5885′]

WindowsForms-Variante

[wpdm_package id=’5925′]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Alex Haack
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.