У меня есть класс с участником "Адрес", который я считал из XML-файла, который имеет следующий формат (поддельный адрес - имя поля XML является "Адресом" - не показанный):
Crescent St., 106-1190, \r\n Торонто Ont \r\n V2K 2Z6
Я создал Многострочное Текстовое поле для отображения в форме с набором свойств Принимать-возврата к истинному.
Текстовое поле отображает следующее с символами новой строки, не работающими
Crescent St., 106-1190, \r\n Торонто Ont \r\n V2K 2Z6
Я онлайн искал различные решения, и я попробовал следующее:
1) \n и \\n
2) \\r \\n
Это работает, если я добавляю к свойству непосредственно как так:
Address.Text = "106-1190 Crescent St.\r\nToronto Ont\r\nV2K 2Z6";
Но если я загружаю строковую переменную из XML-файла и пытаюсь присвоить его текстовому свойству:
Address.Text = Employee.Address;
Это не работает.
Я установил контрольные точки, чтобы проверить, что различие между прямым присвоением и переменным углом присвоения получило это различие:
Прямой: Crescent St., 106-1190, \r\n Торонто Ont \r\n V2K 2Z6
Переменная: Crescent St., 106-1190, \\r \\n Торонто Ont \\r \\n V2K 2Z6
таким образом, где-нибудь код изменяет обратную косую черту на двойную обратную косую черту в преобразовании от строки XML до переменной.
Я действительно не хочу должным быть анализировать свои строки XML для удаления дополнительной наклонной черты.... Как я представляю свои строковые данные в XML-файле, таким образом, что они преобразовываются в переменную соответствующей строки только с единственной наклонной чертой для моих разрывов строки для разоблачения правильно.
Заранее спасибо.
Управление текстовым полем не интерпретирует экранирования и не интерпретирует XML. Так что это просто символы \ r и n. Вам нужно обработать строку, подставив строку @"\r\n" под "\r\n".
Address.Text = Employee.Address.Replace(@"\r\n", "\r\n");
это эквивалентно этому
Address.Text = Employee.Address.Replace("\\r\\n", "\r\n");
, потому что @ предотвращает интерпретацию \ в строке.
редактирование: на основе комментария, это еще лучшая форма, она переводится на \n в unix и \r\n в Windows.
Address.Text = Employee.Address.Replace("\\r\\n", Environment.NewLine);
Когда вы говорите "\ n"
в исходном коде, компилятор преобразует \ n
в новую строку , но когда вы читаете свой XML, вы получаете два разных символа \
и n
. Они не обрабатываются компилятором, поэтому не будут преобразованы в новую строку. Вместо этого он будет представлен в строке как "\\ n"
, то есть экранированная обратная косая черта, за которой следует n.
Самый простой способ исправить это, вероятно, заменить символы перед отображением.
Address.Text = Employee.Address.Replace("\\r", "\r").Replace("\\n", "\n");
Лучше всего убедиться, что сгенерированные XML-данные не содержат экранированных последовательностей. Они не являются частью XML и должны быть обычными переносами строк.
106-1190 Crescent St. \ r \ n Toronto Ont \ r \ n V2K 2Z6
Я думаю, что это меняется, когда вы читаете из поля XML . Проверьте это или попробуйте после чтения заменить в строковом значении две обратной косой черты на одну обратную косую черту.
Вы должны использовать необработанные строки , а затем можете написать @ "106-1190 Crescent St. \ r \ nToronto На \ r \ nV2K 2Z6 "
. Это приводит к тому, что строковый литерал обрабатывается без какой-либо языковой интерпретации, поэтому "\ n"
остается "\ n"
.
Аналогичным образом, чтобы присвоить необработанную строку из переменной, используйте:
Address.Text = @Employee.Address;
Изменить: я также согласен с теми, кто сказал вызывать String.Replace ("\\ r \\ n", Environment.NewLine) ;
. Это более независимое от платформы решение, чем его замена на "\ r \ n"
и такие методы, как Console.WriteLine ()
append Environment.NewLine
в любом случае вместо жестко запрограммированного , например, "\ n"
. См. запись MSDN на Environment.NewLine .