Как сделать все значения в одной прямой вертикальной линии, не повторяя «\ t» или «\ n»? - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь сделать так, чтобы цены на продукты в текстовой области были прямыми.Однако, поскольку длина названий продуктов различна, для выравнивания цен по вертикали потребуется разное количество «\ t».

Вот пример того, что я пытаюсь сделать:

string text = "1X "  + "ABC Brand Drink \t\t\t\t " + price + "\n" + "2X" + 
"BCD Drink that has a longer name \t\t" + price;

Мой вопрос: есть ли способ сделать мои цены вертикально выровненными, не используя все escape-последовательности "\ t"?Я не знаю, сколько "\ t" текста будет сгенерировано программно, поэтому я не знаю, как измерить #.

Вот пример выходных данных, над которыми я работаю: https://imgur.com/a/kE0HJY6

Я пытаюсь использовать это в шаблоне API HelloSign для заполнения настраиваемого текстового поля.

ОБНОВЛЕНИЕ: До сих пор я использовал свойство String.PadRight, как было предложено в комментариях, оно работает, но цена все еще не полностью выровнена.Вот изображение текущего результата: https://imgur.com/a/ZdaTqaW. Вот коды, которые я использовал:

 ArrayList al = new ArrayList();
        string prodName = "Try out product A and product B2";
        string price = "$620";
        string quantity = "1X";
        Product a = new Product(prodName, price, quantity);
        al.Add(a);
        string prodName2 = "Out product A and product Basdasddddddasd";
        string price2 = "$650";
        string quantity2 = "123X";
        al.Add(new Product(prodName2, price2, quantity2));
        string str = "";
        string abs = "";
        int nam, quan = 0;
        int asdsd = 0;
        foreach (Product p in al)
        {
            abs = "";
            nam = p.ProdName.Length;
            quan = p.ProdQuantity.Length;

            abs += p.ProdQuantity + " " + p.ProdName;

            //if ((nam + quan) % 2 == 0)
            //{
            //    asdsd = (175 - (nam + quan));
            //}
            //else
            //{

            //    asdsd = (175 - (nam + quan) - 1);
            //}
            asdsd = (175 - (nam + quan));

            str += abs.PadRight(asdsd) + p.ProdPrice + "\n\n";

Пожалуйста, игнорируйте имена переменных, я изменю их после того, как все будет завершено.

1 Ответ

0 голосов
/ 29 декабря 2018

Вам не нужны вкладки, вам просто нужно знать самый длинный текст в каждом столбце, а затем просто вставлять вправо или влево в зависимости от желаемого выравнивания.Далее следует псевдокод:

foreach value in each column
    find longest length

foreach value in each column
    add to text: current value padded left longest length - actual length // right alingment
        or
    add to text: current value padded right longest length - actual length // left alingment
        + whatever addtional spacing you want in between columns.

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

Методы, которые вы ищете:

...