Ich habe ein Feld mit fester Länge, in dem ich Pfadinformationen anzeigen möchte. Ich dachte in .NET, es gibt eine Methode, die lange Pfadnamen durch Einfügen von Ellipsen in Felder mit fester Länge abkürzt, zum Beispiel ".. .... \ myfile.txt ". Ich kann nicht für das Leben von mir diese Methode finden.
TextRenderer
. MeasureText
Ich hatte das gleiche Dilemma wie das OP, da ich eine Lösung brauchte, um einen abgekürzten Pfad ohne allzu großen Aufwand zu zeigen, so dass meine Benutzeroberfläche leicht die Hauptteile eines Pfades zeigen konnte. Die endgültige Lösung: Verwenden Sie TextRenderer
MeasureText
Methode wie folgt:
Wichtig: Eine Formatierungsoption von übergeben TextFormatFlags.ModifyString
bewirkt, dass die MeasureText
-Methode das Zeichenfolgenargument ändert ( compactedString
), um eine komprimierte Zeichenfolge zu sein. Dies erscheint sehr seltsam, da kein explizites Schlüsselwort ref
oder out
method angegeben ist und Strings unveränderlich sind. Es ist jedoch definitiv der Fall. Ich nehme an, der Zeiger der Zeichenfolge wurde über unsicheren Code in der neuen komprimierten Zeichenfolge aktualisiert.
Als eine weitere Anmerkung des Lesers, da ich möchte, dass die komprimierte Zeichenfolge einen Pfad komprimiert, habe ich auch die TextFormatFlags.PathEllipsis
Formatierungsoption.
Ich fand es praktisch, eine kleine Erweiterungsmethode für die Steuerung zu erstellen, damit alle Steuerelemente (wie TextBox und Label) ihren Text auf einen komprimierten Pfad setzen können:
%Vor%Es gibt eigene Lösungen für kompakte Pfade sowie einige WinApi-Aufrufe, die man verwenden kann.
Sie können pinvoke verwenden anrufen PathCompactPathEx
eine Zeichenfolge basierend auf der Anzahl von Zeichen zu komprimieren Sie möchten es beschränken auf. Beachten Sie, dass die Schriftart und die Breite der Zeichenfolge auf dem Bildschirm nicht berücksichtigt werden.
Quellcode PInvoke: Ссылка
%Vor%Es gibt auch mehr Lösungen, die reguläre Ausdrücke und intelligentes Parsen von Pfaden beinhalten, um zu bestimmen, wo Auslassungspunkte gesetzt werden sollen. Dies sind ein paar, die ich gesehen habe:
Falls jemand nach der gleichen Sache sucht. Ich habe mir diese Funktion ausgedacht:
%Vor% Von diesem Coding Horror-Blogpost zum Verkürzen langer Dateipfade gibt es einen Windows-API-Aufruf PathCompactPathEx
können Sie verwenden.
Sie denken an die StringTrimming.EllipsisPath
Aufzählungskonstante, die kann mit einem StringFormat
to remote verwendet werden, um einen getrimmten Pfad zu verwenden, indem Sie Graphics.DrawString
. Jedoch hat .Net selbst keine Methode, die einen getrimmten Pfad zurückgibt.
Ich habe eine einfach zu verwendende Klasse gefunden, die von TextBox abgeleitet wurde: EllipsisTextBox das kapselt StringTrimming.EllipsisPath ein. Funktioniert für mich!