Похоже, вы пытаетесь отобразить все это в ASCII в одном текстовом поле. Да? Если это так, то это довольно сложно. Похоже, у вас есть фиксированное количество вкладок после каждой прямо сейчас, и это будет проблемой. Вместо этого вы могли бы делать пробелы - что, я подозреваю, вы делаете с padright (не очень знаком с этой конкретной функцией).
Ключевым моментом, однако, является то, что с таким чистым ASCII, как этот, показанным шрифтом переменной ширины, вы никогда не добьетесь, чтобы он идеально выровнялся во втором столбце. Вы можете подобрать это близко, если вы прилежны, но это все - если у вас есть одна строка с большим количеством заглавных букв W, а другая с большим количеством строчных i, у вас будут большие различия в ширине независимо от того, что вы делаете. Если вы выполняете рендеринг в GDI, лучше всего сделать один вызов DrawText на столбец. Вы можете сделать одну большую строку из каждого столбца, если хотите, и вызвать MeasureString для первого столбца, чтобы определить, сколько места нужно переместить для второго столбца.
Или, если это интерфейс, в котором вы можете использовать html, таблицы или div отлично подойдут. Зависит от специфики вашей среды. Вы также можете сделать что-то, например, иметь две метки с автоматической настройкой высоты на панели FlowLayout, если это были WinForms и т. Д. Есть много вариантов сделать эту работу, но только не чистый ascii с шрифтом переменной ширины.
РЕДАКТИРОВАТЬ: Кроме того, я видел, как вы спросили о том, как получить экземпляр класса Graphics в веб-сервисе. Вы можете сделать что-то вроде этого:
private static Bitmap bitmap = new Bitmap( 1, 1 );
private static Graphics graphics = null;
public static Graphics GetGeneralGraphics()
{
if ( graphics == null )
graphics = Graphics.FromImage( bitmap );
return graphics;
}
Возможно, вы захотите сделать эти локальные переменные (которые вы правильно расположите, когда закончите) в контексте веб-сервисов.