Question

Je dois imprimer une chaîne dans une boîte de message au format spécifique pour lequel je suis en utilisant un code similaire comme indiqué ci-dessous:

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

pour suivre ensemble de valeurs:

XYZ,ABC,100

X,ABC,100

Je reçois suivant la sortie:

XYZ     ABC     100

X     ABC     100

Ainsi, vous pouvez voir la deuxième ligne n'est pas bien formaté. Probablement ce qui se passe parce que je suis en train d'imprimer ce MessageBox. L'espace d'un caractère et un « espace » prend est différent. Toute solution pour cela?

Était-ce utile?

La solution

Essayez d'utiliser un \t à insérer entre les valeurs des onglets.

Autres conseils

Cela ne fonctionne pas parce que MessageBox utilise une police à espacement proportionnel, la lettre M est beaucoup plus large que la lettre l. Tout comme il est dans ce message que vous lisez maintenant. Vous ne pouvez attendre un alignement comme cela fonctionne si elle est affichée avec une police à pas fixe. Modification de la police de boîte de message ne convient pas, il est un paramètre système.

Vous pouvez obtenir un peu mieux en utilisant les onglets:

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

mais il est pas infaillible si la taille du champ approche la taille de l'onglet. Utilisez un ListView avec vue = Détails à la place.

Je ne sais pas si elle est en fait ce que vous voulez dire, mais utilisez un monospaced police comme " Courier New ». Si vous l'avez déjà fait, alors désolé pour cette réponse évidente.

Pas grave: il est impossible avec la norme MessageBox accoding à ce fil . Peut-être alors une option est de créer votre propre classe MessageBox.

Un test créé dans Windows application avec le code suivant:

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

Est-ce que vous avez dit, mais après avoir vérifié avec l'application de la console avec le code suivant:

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

Il fait ce que vous attendez.

Alors, ce que les tests suggèrent est que si on fait ce qu'il est censé faire, mais avec le manque de même police de largeur dans la MessageBox, il ne correspond pas correctement. Mais d'autre part, l'application de la console en utilisant les mêmes polices de largeur, il ne se aligne exactement.

La classe MessageBox, que ce soit de formes ou WPF, est juste une enveloppe autour de la boîte de message win32, donc un programmeur ne peut pas (facilement) faire des choses comme changer la police à une police à pas fixe si toutes les lignes de caractères joliment avec le formatage de chaîne.

Vous pouvez cependant faire votre propre clone de MessageBox en utilisant un formulaire et une étiquette (et tout ce dont vous avez besoin des boutons), montrer ensuite à l'aide de la méthode ShowDialog ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top