C# — метод WriteLine(String.Format()) повторяет первую строку и игнорирует другие [дубликаты]

Я создал приложение формы окна С#, которое принимает ввод через текстовые поля и записывает их в текстовый файл при нажатии соответствующей кнопки. Я обнаружил, что сохранение четкого макета в результирующем текстовом файле было проблемой на всем протяжении разработки, и, где это возможно, пытался сохранить данные из текстового поля вместе с меткой, которая находится рядом с текстовым полем на консоли. Я решил попробовать свести информацию в таблицу и прочитать о методе String.Format(), который выделяет пространство внутри строки {0, -10}, а затем позволяет перечислить переменную или textbox.Text, который должен занять это место.

Теоретически это работает, но я обнаружил, что когда пробовал, метод, кажется, принимает только первый ввод и повторяет его во всех доступных местах...

        consoleFile.WriteLine("--------------------------------------------------------");
        consoleFile.WriteLine("Patient Name | Owner Name | Surgeon | Anaethetist | Date");
        consoleFile.WriteLine(String.Format("{0, -20} | {0, -20} | {0, -20} | {0, -20} | {0, -20}",
                              txtPatName.Text, txtOwnerName.Text, txtSurgName.Text, txtAnthtstName.Text, txtDate.Text));
        consoleFile.WriteLine("--------------------------------------------------------");
        consoleFile.WriteLine("\n\n");

В этом примере я бы подумал, что каждый слот {0, -20} будет принимать значение из соответствующего текстового поля в списке на следующей строке кода. Однако каждый слот выводит текст из первого аргумента «txtPatName.Text», что означает, что одна и та же строка записывается пять раз. Итак, как мне заставить метод распознавать другие входные данные?

Если я сделал очевидную ошибку, пожалуйста, наберитесь терпения, так как я новичок в методе String.Format() на сегодняшний день, любая помощь очень ценится!

Отметка


person marcuthh    schedule 24.06.2015    source источник
comment
См. формат String.Format("{0, -20} | {0, -20} | {0, -20} | {0, -20} | {0, -20}",   -  person EZI    schedule 24.06.2015


Ответы (2)


Вам нужно использовать {1, -20} и так далее. Это индекс параметра, переданного в String.Format:

    consoleFile.WriteLine("--------------------------------------------------------");
    consoleFile.WriteLine("Patient Name | Owner Name | Surgeon | Anaethetist | Date");
    consoleFile.WriteLine(String.Format("{0, -20} | {1, -20} | {2, -20} | {3, -20} | {4, -20}",
                          txtPatName.Text, txtOwnerName.Text, txtSurgName.Text, txtAnthtstName.Text, txtDate.Text));
    consoleFile.WriteLine("--------------------------------------------------------");
    consoleFile.WriteLine("\n\n");
person hmnzr    schedule 24.06.2015
comment
Теперь это имеет смысл, я предположил, что 0 был связан с -20 с точки зрения начала строки. Спасибо за помощь! - person marcuthh; 24.06.2015

Первое число внутри {} — это заполнитель, указывающий позицию элемента в String.Format, вы указываете только 0, что означает каждый раз выбирать txtPatName.Text.

Вам нужно увеличить число от 0 до 4.

Вы также можете напрямую использовать заполнители в Console.WriteLine.

См. раздел Композитное форматирование.

person Habib    schedule 24.06.2015