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

0
(0)

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

WindowsForms-Variante

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Schreibe einen Kommentar

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