2016-04-27 19 views
3

Ich verwende String.Format(), um einige Textinformationen zu formatieren, und es funktioniert perfekt mit "Console.WriteLine()" wie in msdn dokumentiert.String.Format() Alignment verhält sich anders, wenn es um MessageBox geht

Mein Code ist wie folgt:

 StringBuilder strBuilder = new StringBuilder(); 
     strBuilder.AppendLine("Summary Information:"); 
     strBuilder.AppendFormat("{0,-10}{1,-8}{2,-10}{3,-30}{4,-7}\n", "Header1", "Header2", "Header3", "Header4", "Header5"); 
     strBuilder.AppendFormat("{0,-10}{1,-8}{2,-10}{3,-30}{4,-7}\n\n", "A", "1", "Y", "Long Information", "13"); 
     string result = strBuilder.ToString(); 

     Console.WriteLine(result); 

Die Konsole Ergebnis ist unten dargestellt.

Console Result

Aber, wenn ich versuche, es auf einem MessageBox zu zeigen, verschieben sich die Spalten. Irgendwie sind die Räume geschluckt.

MessageBox.Show(result, "MBox Test"); 

MessageBox result

Es ist auch in Ordnung, weil ich nicht sehr Kneen auf der "MessageBox" Klasse des .Net war. Es hat so viele Einschränkungen.

Also habe ich beschlossen, ein benutzerdefiniertes Formular zu implementieren, um diese Nachricht anzuzeigen. Ich habe es mit Label und RichTextBox versucht. Aber leider war das Ergebnis genau dasselbe wie die MessageBox.

Und ich bin verwirrt. Warum .Net-eigene Steuerelemente können die Ausrichtung von String.Format() nicht unterstützen. Kann ich irgendwie mit dieser Situation umgehen?

+0

gut nach diesem Lern ​​wegen der Schriftart ist, ich habe hat eine Messagebox erstellt, die mit html arbeitet. so Problem gelöst. und jetzt habe ich viel mehr Flexibilität beim Formatieren der Nachrichtenbox. – fkucuk

Antwort

1

Die String.Format(...) funktioniert einwandfrei, aber es richtet sich nicht als eine Tabelle in Ihrer Message-Box wegen der Schriftart!

In Ihrer Konsole verwenden Sie eine Schriftart mit fester Breite (Monospace), aber die MessageBox verwendet eine mit dynamischer Breite. Daher z.B. ein "M" verbraucht mehr Platz als ein "i" oder ein "" (Leerzeichen) und dies verwirrt Ihr Layout.

Wie you can't change the messagebox font, müssen Sie Ihren eigenen Rahmen mit jeder Art von Text-Widget, das benutzerdefinierte Schriftarten unterstützt, z. B. eine TextBox oder nur eine gewöhnliche Label erstellen.

3

Die Konsole verwendet eine monospaced font, während das Meldungsfeld eine Schriftart mit variabler Breite verwendet. Aus diesem Grund scheint es, dass die Ausrichtung nicht im Meldungsfeld beibehalten wird.

In der Konsole hat ein Leerzeichen die gleiche Breite wie jedes andere Zeichen. In der Nachrichtenbox ist ein Leerzeichen nicht so breit (und auch keine Zeichen wie "i" und "l"), so dass die Dinge nicht so ausgerichtet sind, wie Sie es möchten.

Der nächste, den Sie in der Lage sein werden, die Ausrichtung in der Nachrichtenbox zu behalten, ist die Verwendung von Tabulatoren anstelle von Leerzeichen, aber selbst dann werden die Zeilen möglicherweise wegen der Länge einiger Wörter nicht ausgerichtet.

0

Sie Registerkarten verwenden können (\ t) anstelle von Leerzeichen gleiche Abstände zwischen den Spalten zu bekommen, sollte es perfekt in jedem Schriftart-Typ arbeiten :)