Проблема с форматированием строки с string.format в C #

StackOverflow https://stackoverflow.com/questions/3168180

  •  02-10-2019
  •  | 
  •  

Вопрос

Мне нужно распечатать строку в окне сообщения в определенном формате, для которого я использую код, аналогичный, как показано ниже:

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

Так что для следующего набора значений:

XYZ,ABC,100

X,ABC,100

Я получаю следующие результаты:

XYZ     ABC     100

X     ABC     100

Таким образом, вы можете видеть, что вторая строка не очень хорошо отформатирована. Вероятно, это происходит потому, что я печатаю это в сообщении. Пространство, характере и «пространство» занимает разное. Любое решение для этого?

Это было полезно?

Решение

Попробуйте использовать A. \t Чтобы вставить вкладки между значениями.

Другие советы

Это не работает, потому что MessageBox использует пропорционально распределенный шрифт, буква M намного шире, чем буква L. Также как в этом сообщении вы читаете сейчас. Вы можете ожидать только выравнивания, как это работать, если он отображается с фиксированным шрифтом. Изменение шрифта коробки сообщения не подходит, это система настройки системы.

Вы можете получить его несколько лучше, используя вкладки:

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

Но это не является обманом, если размер поля приближается к размеру вкладки. Вместо этого используйте список ListView с View =

Не уверен, на самом деле это то, что вы имеете в виду, но используйте моноспондент шрифт как "Новый Курьер«Если вы уже сделали, то извините за этот очевидный ответ.

Nevermind: это невозможно со стандартным стандартным сообщением Message Accoding к этому нить. Отказ Может быть, тогда вариант - создать свой собственный класс почты.

Тест, созданный в приложении Windows со следующим кодом:

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

Делает то, что вы сказали, но после проверки его приложением консоли со следующим кодом:

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

Это делает то, что вы ожидаете.

Итак, какие тесты предлагают, если делает то, что должно делать, но с отсутствием того же ширина шрифта в MessageBox, это не выстраивается должным образом. Но с другой стороны, с приложением консоли, используя ту же ширину шрифтов, он точно работает.

Класс Messagebox, будь то из форм или WPF, это просто обертка вокруг окна сообщения Win32, поэтому программист не может (легко) делать такие вещи, как менять шрифт в шрифт с фиксированным шагом, чтобы все символы хорошо выстроились с Форматирование строки.

Однако вы можете сделать свой собственный клон MessageBox, используя форму и метку (и какие-либо кнопки, которые вам нужны), то покажите его с помощью метода ShowDialog ().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top