Archiv für den Monat: April 2013

Drag&Drop: FileDrop aus eigener Applikation heraus

Möchte man per Drag&Drop Dateien aus dem Windows Explorer in die eigene Applikation hereinziehen, so ist das kein Problem:

  • Platzieren eines Controls, auf dem die Datei(en) per Drag&Drop gezogen werden sollen
  • Eigenschaft “AllowDrop” des Controls auf “True” setzen:

image

  • Registrieren auf die Events DragEnter und DragDrop:

image

  • Im EventHandler für DragEnter prüfen, ob es sich im Dateien und den Mauszeiger anpassen handelt:

if (e.Data.GetDataPresent("FileDrop"))
{
    e.Effect = DragDropEffects.Copy;
}

  • Im EventHandler für DragDrop die Datei auslesen (und in einer TextBox darstellen)

string[] files = e.Data.GetData("FileDrop") as string[];
if (files == null) return;

_txtContent.Text = File.ReadAllText(files[0]);

Das Resultat kann dann so aussehen:

image

Anders herum ist es jedoch etwas schwieriger: Wie kann ich Daten beispielsweise aus einer TextBox per Drag&Drop in eine Datei in den Windows Explorer droppen?

Dazu muss man sich eines kleinen Tricks behelfen: Man muss ein FileDrop initiieren und die zu droppenden Daten in eine temporäre Datei kopieren. Der Dateiname der temporären Datei ist dann auch der Dateiname des Drop Targets. Hier ist eine kleine Schritt-für-Schritt Anleitung:

  • Registrieren auf das MouseDown Event als Initiator für die Drag&Drop Aktion:

image

  • Anlegen einer temporären Datei mit dem Inhalten, die in die zu droppende Datei geschrieben werden sollen. Wichtig: Der Dateiname ist auch der Dateiname der dort erstellt wird, wo die Datei im Explorer gedropped wird:

// Create temporary file name
string tempFile = Path.Combine(Path.GetTempPath(), "LoremIpsum.txt");

  • Inhalt in die temporäre Datei schreiben

// Write content to drop into the temporary file
File.WriteAllText(tempFile, _txtContent.Text);

  • Temporäre Date in ein string-Array verpacken (wird benötigt, da FileDrop ein string array erwartet):

// Create string-array for FileDrop operations
string[] files = new[] { tempFile };

  • DataObject erstellen und mit dem Format der Daten (“FileDrop”) und den Daten instanziieren:

// Create DataObject for "FileDrop" and add string[] with temporary file
DataObject dataObject = new DataObject("FileDrop", files);

  • DragDrop initiieren und dataObject übergeben:

// Initiate DragDrop operation
DoDragDrop(dataObject, DragDropEffects.All);

GitHub Repository mit PlasticSCM verwalten

Durch Zufall bin ich heute auf der Seite von CodeIce gelandet und habe gesehen, dass deren SCM (Software Configuration Management) System namens “Plastic SCM” auf mit Git Repositories auf GitHub, CodePlex & Co umgehen kann.

Da ich selbst an OpenSource Projekten auf GitHub und CodeProject arbeite, wollte ich mir das System mal genauer anschauen. Eine Lizenz für bis zu 15 Benutzer ist zudem kostenlos – was habe ich also schon verlieren? Zwinkerndes Smiley

 

Nachdem ich mir einen ersten Workspace eingerichtet habe, wollte ich mein GitHub Repository importieren bzw. synchronisieren. Dazu habe ich zuerst meine GitHub Projektseite geöffnet: https://github.com/minibrain/VisualStudioSetupProjectToWixConverter

image

Anschließend öffnet man in Plastic SCM den Eintrag “Branches” unter “Main actions”:

image

Als nächstes wählt man den Branch aus und klickt mit der rechten Maustaste darauf. Im Kontextmenü wählt man nun “Replication” und “Sync with Git …”.

Anschließend gibt man den Pfad zum Repository und die Login-Daten ein:

image

Nach einem Klick auf “Sync” wird damit begonnen, die Branches aus dem Git Repository zu importieren:

image

Nach einer kurzen Weile ist der Import dann abgeschlossen:

image

Nun kann man die Features von Plastic SCM nett verwenden. Beispielsweise kann der “Branch Explorer” dazu verwendet werden, alle Branches visuell darzustellen. Bei meinem kleinen Spielprojekt ist das ganze etwas witzlos, weil ich noch nicht weggebrancht habe:

image

Alle Dateien aus dem Verzeichnis zeigt die “Items”-Ansicht:

image

Alle Commits lassen sich unter der Rubrik “Changesets” im Tab “Main actions” auflisten, durchsuchen und exportieren:

image

Die Integration in Visual Studio ist auch dabei:

image

Viele der gezeigten Features sind auch im Visual Studio verfügbar.

Alls in allem ein wirklich gutes Tool. Als nächstes werde ich versuchen, mein CodePlex Repository zu synchronisieren. Mal schauen, ob das auch so einfach geht Smiley

Hier kann man das Tool kostenlos herunterladen:
http://www.plasticscm.com/

Spezielle Seite zum neuen Feature “GitSync”:
http://www.plasticscm.com/gitsync/index.html

Blog-Eintrag zum Sync von GitHub Repos: http://codicesoftware.blogspot.com/2013/01/using-plastic-scm-to-sync-with-junior.html