Frage

Ich brauche eine Zeichenkette in einem Meldungsfeld in bestimmtem Format zu drucken, für die i-Code verwenden, ähnlich wie wie unten dargestellt:

string text=""; 
for (int i=0; i<n; i++)
{
   a=..
   b=..
   c=..
   text += String.Format("{0, -8} {1,-4} {2,8}", a, b, c);
}
MessageBox.Show(text);

Also für folgenden Satz von Werten:

XYZ,ABC,100

X,ABC,100

Ich bekomme folgende Ausgabe:

XYZ     ABC     100

X     ABC     100

So können Sie die zweite Zeile sehen nicht gut formatiert. Wahrscheinlich geschieht dies, weil ich dies in MessageBox bin drucken. Der Raum ein Zeichen und ein ‚Raum‘ nimmt, ist anders. Jede Lösung für dieses?

War es hilfreich?

Lösung

Versuchen Sie, eine \t mit Tabs zwischen Werten einzufügen.

Andere Tipps

Das funktioniert nicht, weil MessageBox eine Proportionalschrift verwendet, den Buchstaben M viel breiter als der Buchstabe l ist. So wie es in dieser Nachricht ist Ihr jetzt lesen. Sie können nur erwarten Ausrichtung wie dies funktioniert, wenn es mit einem fixed-pitch Schriftart angezeigt wird. Ändern des Meldungsfeld Schriftart nicht geeignet ist, es ist eine Systemeinstellung.

Sie können es etwas besser durch Tabs:

text += String.Format("{0}\t{1}\t{2}", a, b, c);

aber es ist nicht narrensicher, wenn die Feldgröße auf die Registerkarte Größe annähert. Verwenden Sie einen Listview mit Blick = Daten statt.

Nicht sicher, ob es tatsächlich ist, was du meinst, aber verwenden ein dicktengleiche Schriftart wie " Courier New “. Wenn Sie bereits getan haben, dann sorry für diese offensichtliche Antwort.

Nevermind: es ist nicht möglich, mit dem Standard-MessageBox accoding diesen Thread . Vielleicht dann eine Option, Ihre eigene MessageBox-Klasse zu erstellen.

Ein Test in Windows-Anwendung mit dem folgenden Code erstellt:

    public void Test1()
    {
        List<List<String>> list = new List<List<string>>() { 
            new List<String>() { "XYZ", "ABC","100" },
            new List<String>() { "X", "ABC", "100"},
        };

        string text = "", a = "", b = "", c = "";
        for (int i = 0; i < list.Count; i++)
        {
            a = list[i][0];
            b = list[i][1];
            c = list[i][2];
            text += String.Format("{0, -8} {1,-4} {2,8}{3}", a, b, c, Environment.NewLine);
        }
        MessageBox.Show(text);
    }

das tut, was Sie gesagt haben, aber nachdem es mit der Konsolenanwendung mit dem folgenden Code Überprüfung:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Test1();
            Console.ReadKey();
        }

        public static void Test1()
        {
            List<List<String>> list = new List<List<string>>() { 
                new List<String>() { "XYZ", "ABC","100" },
                new List<String>() { "X", "ABC", "100"},
            };

            string text = "", a = "", b = "", c = "";
            for (int i = 0; i < list.Count; i++)
            {
                a = list[i][0];
                b = list[i][1];
                c = list[i][2];
                text += String.Format("{0, -8} {1,-4} {2,8}{3}", a, b, c, Environment.NewLine);
            }
            Console.WriteLine(text);
        }
    }
}

Es tut, was Sie erwarten.

Also, was die Tests deuten darauf hin, wenn das tut, was es tun soll, aber mit dem Mangel an gleicher Breite Schriftart in den MessageBox, ist es nicht richtig ausgerichtet ist. Aber auf der anderen Seite mit der Anwendung Konsole der gleiche Breite Schriftarten verwendet, tut es Line-Up genau.

Die MessageBox-Klasse, ob aus Forms oder WPF, ist nur ein Wrapper um die win32 Message-Box, so dass ein Programmierer nicht in der Lage ist (leicht) Dinge tun, wie ändern Sie die Schriftart in einem fixed-pitch Schriftart so alle Zeichen Linie up schön mit String formatiert wird.

Sie könnten aber machen Sie Ihre eigene Klon von MessageBox ein Formular verwenden und ein Label (und was Tasten Sie brauchen), dann zeigen die Showdialog () Methode verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top