There’s a ton of howto’s out there showing people how to do the drag and drop into a richtext box. But recently I had a job that required me not to drag the contents from one part of the form to the other but to actually drag a file (or files) into a RichTextbox control – and process them.
Which… if you’ve never tried this before drops the file as an icon you can click on and open. Not really useful if you’re trying to process files. It’s kind of annoying that even after a bit of Googling you’ll get a lot of links that let you drag the text or images or all kinds of stuff from one part of the form – to another part of the form.
Which is fine if that’s what you need. But what I needed was to be able to grab several files – of either text or xml – and then process them and display the output.
Since I can’t share my work code – here’s the training wheels version of the code for you. As you can see we process the XML and display it. It also does text so … this is fairly close to the final version – which hopefully I’ll take some time and cleanse it from any confidential use info that may be in it and share. In the mean time – here’s the actual guts of the code that makes it work.
Since I’m reallllly running behind – that’s all I can get out this week – but hopefully it’ll be of use to someone out there. As you can see – I’m calling the richtextbox dragenter event and customizing it. The first thing I do is hunt for the dataformats.filedrop type off the event handleer – this allows me to grab the filename and – load it appropriately into the richtextbox.
Anyway… to all out there – here’s the code – have an AWESOME New Year… and I’ll be back on line to annoy all as soon as I can.
Imports System Imports System.Drawing Imports System.Data Imports System.IO Imports System.Collections Imports System.Windows.Forms Imports System.Xml Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'This call is required by the Windows Form Designer. RichTextBox1.AllowDrop = True End Sub Private Sub richTextBox1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles RichTextBox1.DragEnter Try If e.Data.GetDataPresent(DataFormats.FileDrop) Then ' Put all file names into a string array 'in case the user grabbed more than one file. Dim files As String() = CType(e.Data.GetData(DataFormats.FileDrop), String()) Try 'Now we break it down - we only want text files, xml or xsd files 'so we trap for that if it's not one of those - we ignore it. If files(0).Contains(".txt") Then Dim f_stream As IO.StreamReader = FileIO.FileSystem.OpenTextFileReader(files(0)) RichTextBox1.Text = f_stream.ReadToEnd() 'Just for fun we show the name of the file and link it llblFileName.Text = files(0).ToString f_stream.Close() ElseIf files(0).Contains(".xml") Then Dim filename As String = files(0) Dim reader As New XmlTextReader(files(0)) llblFileName.Text = files(0).ToString reader.MoveToContent() 'Loop through the XML and display it in the richtextbox Do While reader.Read RichTextBox1.AppendText(reader.ReadContentAsString) Loop reader.Close() End If Catch ex As Exception MessageBox.Show(ex.Message) Return End Try End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub llblFileName_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles llblFileName.LinkClicked System.Diagnostics.Process.Start(llblFileName.Text) End Sub End Class