Archive for the 'Visual Studio & .NET' Category

20
Mai
13

ProgressBar für die Console

Für ein kleines Projekt brauchte ich einen Fortschrittsbalken für eine Kommandozeilen-Applikation. Ich war erstaunt, wie einfach das funktionierte und möchte meine Erfahrungen hier teilen.

Hier schon mal ein Blick auf das Endergebnis:

image

Zuerst einmal müssen die Begrenzungen des Fortschrittsbalken gezeichnet werden.

Um den Cursor zu positionieren, kann auf die statischen Eigenschaften CursorTop und CursorLeft der Console zurückgegriffen werden:

CursorTopLeft

Hier der Code zum Erstellen der Begrenzungen des Fortschrittsbalkens:

// Create boundaries for progress bar
Console.CursorTop = topOffset;
Console.CursorLeft = leftOffset;
Console.Write("[");
Console.CursorLeft = length;
Console.Write("]");

Das sieht dann erstmal so aus:

image

 

Dann füllen wir die Begrenzungen mit dem aktuellen Fortschritt:

// Calculate size of one percent element
float progressElementSize = ((float)length – leftOffset – 2) / total;

// Create progress content
int position = 1;
Console.CursorLeft = position;
for (int i = leftOffset; i < progressElementSize * progress; i++)
{
    Console.BackgroundColor = progressColor;
    Console.CursorLeft = position++;
    Console.Write(" ");
}
Console.BackgroundColor = ConsoleColor.Black;

Und das sieht dann so aus:

image

Ganz wichtig: In der letzten Zeile wird die Farbe wieder auf schwarz gesetzt, da sonst die aktuelle Schriftfarbe auf die des Fortschritts gesetzt wird.

Abschließend will ich noch den aktuellen Fortschritt prozentual anzeigen:

// Write progress message
Console.CursorLeft = length + 2;
int result = progress * 100 / total;
Console.Write(customProgressMessage ?? (result + "%").PadLeft(4));

Das .PadLeft(4) habe ich angehängt, damit der String nicht springt, wenn von 9% auf 10% und von 99% auf 100% gesprungen wird.

Viel Spaß damit Smiley

Download: http://sdrv.ms/10HH7Pk

29
Apr
13

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);

18
Apr
13

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

22
Feb
13

Debugger zum Prozess-Start anhängen

Ab und zu kann es vorkommen, dass man sich bereits zu Prozess-Start mit einem Debugger anhängen möchte.

Dazu kann man sich eines einfachen Ticks bedienen. In der Registry registriert man einen Debugger an einem Prozessnamen.

Dazu öffnet man den Registrierungseditor (Start | Ausführen | regedit.exe):

image

Am Schlüssel
“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”

trägt man dann einfach den Namen zu debuggenden Prozesses ein (hier: “MyDebuggee.exe”). Anschließend legt man eine neue Zeichenkette namens “debugger” an und weist ihr den Wert “vsjitdebugger.exe” zu.

Sobald man dann MyDebuggee.exe ausführt, erscheint der Just-In-Time Debugger Dialog von Visual Studio:

image

Jetzt muss man nur noch einen geeigneten Debugger auswählen und schon kann die Debugging-Session losgehen.

Hier noch der Link zum Original MSDN-Artikel: http://msdn.microsoft.com/en-us/library/a329t4ed(v=vs.100).aspx

Happy Debugging! Smiley

21
Jun
09

Clone Detective für Visual Studio

Heute bin ich auf ein cooles Add-On für Visual Studio aufmerksam geworden: Der Clone Detective für Visual Studio.

image 

Als Engine hinter Clone Detective kommt ConQAT von der TU München zum Einsatz: http://conqat.cs.tum.edu/index.php/Download

Nach der Installation gibt es in der “Ansicht” –> “Weitere Fenster” neue Einträge:

  • Clone Explorer
  • Clone Intersections
  • Clone Results

image

Zur Demonstration der einzelnen Fenster habe ich mir mal die Freiheit genommen, den Quellcode von iTextSharp auf Code-Duplikate zu untersuchen.

Clone Explorer

Die Clone Explorer startet die Analyse des Quellcodes und zeigt in einer Übersicht das Resultat:

image

Die Resultate lassen sich nun noch speziell gruppieren (hier: nach duplizierten Codezeilen):

image

Ebenfalls unterstützt wird das Importieren und Exportieren des Clone-Berichts. Selbstverständlich lassen sich die Such-Optionen noch konfigurieren:

image

Für meinen Geschmack war das allerdings schon gut genug 🙂

Code Intersections

Code Intersections stellen – wie der Name schon sagt- Überschneidungen im Code dar. Im folgenden Beispiel enthält die Datei BarcodeInter25.cs 15 Codeüberschneidungen mit der Dtei BarcodePostnet.cs:

image

Das Diagramm zeigt das Vorkommen der Überschneidung in der Datei. Mit der rechten Maustaste kann nun noch in den Ergebnissen gesucht werden und die betreffende Stelle über einen Doppelklick im Editor geöffnet werden.

Im Editor wird an der linken Seite eine lila Markierung dargestellt:

image

Diese zeigt die Stelle der Codeduplikate im Code an.

Clone Result

Das Fenster Clone Result zeigt das Code-Duplikat aus dem Editor nochmal an:

image

Fazit

Nicht jedes Duplikat ist auch wirklich ein Duplikat. Viele Fundstellen hingegen haben mir persönlich weitergeholfen, Redundanzen zu verringern und nochmals kritisch über meinen Code zu sehen.

Download

Das Programm kann auf CodePlex kostenlos (inkl. Source Code) heruntergeladen werden:

http://clonedetectivevs.codeplex.com/

Das Installer-Paket ist ca. 14MB groß.

Also Systemvoraussetzungen werden folgende genannt:

  • Visual Studio 2008 Standard oder besser
    (sorry, Visual Studio 2008 Express Editions unterstützen keine AddIns)
  • Java 1.5.0_01 oder neuer
    (ConQAT läuft unter Java)
08
Jun
08

Gratis Source-Code Analyse Tool für Visual Studio

Vor ein paar Wochen hat Microsoft das Project „Microsoft Source Analysis for C#“ veröffentlicht. Die Grundlage für die statische Code-Analyse ist dieses Mal der (C#)-Quellcode.

image

Wie man der eigens dafür eingerichteten Blog-Seite entnehmen kann, wurde das Tool zuvor intern eingesetzt, um den Code auf bestimmte Qualitätsmerkmale zu überprüfen.

Für meinen Geschmack sind ein paar Einstellungen wirklich unnötig bzw. nicht wirklich praxistauglich (zumindest für mich). Zum Glück kann man die zu prüfenden Kriterien über ein kleines Tool im Installationsverzeichnis konfigurieren:

image

Mit einem Doppelklick auf die Settings-Datei wird der Editor geöffnet. Dieser verfügt über 5 Tabs zur Konfiguration: Rules, Settings Files, Results Caching, Company Information und Hungarian. Diese sind nachfolgend der Übersicht halber

alle aufgeführt:

image

image

image

image

image

Im Visual Studio 2008 wird dann eine neue View „Source Analysis“ hinzugefügt, in der die jeweiligen Regelverletzungen aufgeführt werden:

image

Download: http://code.msdn.microsoft.com/sourceanalysis/Release/ProjectReleases.aspx?ReleaseId=1047

Blog-Seite:
http://blogs.msdn.com/sourceanalysis/

Dokumentation der einzelnen Rules:
http://blogs.msdn.com/sourceanalysis/pages/source-analysis-4-2-rules.aspx

08
Jun
08

F12 –> Programm.exe has triggered a breakpoint …

Beim Debuggen meiner Anwendung bin ich heute auf ein seltsames Phänomen gestoßen:

Ich habe die F12-Taste als Tastenkürzel einer Funktion zugeordnet. Wenn ich diese Funktion debuggen möchte, in dem ich auf F12 drücke, erscheint folgende Meldung:

image 

Nachdem ich länger dazu gegoogelt hab, war die Lösung näher als ich dachte: Es liegt daran, dass WindowsNT (wozu auch WindowsXP & Co. zählen) eine Funktion aufrufen, die ähnlich zu DebugBreak() ist.

Wen’s zu sehr nervt (wie mich zum Beispiel) der kann das Problem mithilfe eines Registry-Keys aus der Welt schaffen:

 

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\UserDebuggerHotKey

image

Mehr Informationen dazu findet man auf http://support.microsoft.com/kb/130667/en-us




Blog Stats

  • 193,128 hits