Domanda

Ho bisogno di stampare una stringa in una finestra di messaggio in formato specifico per il quale sto usando un codice simile a come illustrato di seguito:

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

Quindi, per seguire insieme di valori:

XYZ,ABC,100

X,ABC,100

ottengo seguente output:

XYZ     ABC     100

X     ABC     100

Così si può vedere la seconda linea non è ben formattato. Probabilmente questo accade perché sto stampando questo MessageBox. Lo spazio di un carattere e uno 'spazio' che serve è diversa. Qualsiasi soluzione per questo?

È stato utile?

Soluzione

Provare a usare un \t per inserire le schede tra i valori.

Altri suggerimenti

Questo non funziona perché MessageBox utilizza un font spaziatura proporzionale, la lettera M è molto più ampia rispetto alla lettera l. Proprio come è in questo messaggio che state leggendo ora. Ci si può aspettare solo l'allineamento come questo per funzionare se viene visualizzato con un carattere a passo fisso. Cambiare il tipo di carattere finestra di messaggio non è appropriato, è un'impostazione di sistema.

Si può ottenere un po 'meglio utilizzando schede:

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

, ma non è infallibile se la dimensione del campo si avvicina al formato scheda. Utilizzare un ListView con Vista = dettagli posto.

Non sono sicuro se in realtà è quello che vuoi dire, ma utilizza un spaziatura fissa font come " Courier New ". Se hai già fatto, quindi mi dispiace per questa risposta ovvia.

Nevermind: non è possibile con il MessageBox standard di accoding a questo discussione . Forse allora un'opzione è quella di creare la propria classe MessageBox.

Un test creato in Windows Applicazione con il seguente codice:

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

fa quello che hai detto, ma dopo aver verificato con l'applicazione di console con il seguente codice:

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

Si fa quello che ci si aspetta.

Quindi, quali sono le prove suggeriscono è che se sta facendo quello che deve fare, ma con la mancanza di stesso carattere larghezza nella MessageBox, che non è allineata correttamente. Ma d'altra parte, con l'applicazione di console utilizzando gli stessi caratteri di larghezza, lo fa line up esattamente.

La classe MessageBox, sia dalle forme o WPF, è solo un wrapper per la finestra di messaggio win32, quindi un programmatore non è in grado di (facilmente) fare le cose come il cambiamento del carattere di un carattere a passo fisso in modo che tutti i caratteri linea piacevolmente con la formattazione delle stringhe.

Si potrebbe, tuttavia, rendere il proprio clone di MessageBox utilizzando un modulo e un marchio (e qualunque tasti necessari), poi mostrarlo utilizzando il metodo ShowDialog ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top