На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> TextBox и строка с "переовдом строк" , .Net CF 3.5, WM5, WM6
    Странная проблема появилась.

    Есть текст бокс на форме приложения для мобильного устройства.

    Собираю нужную мне строку, которая содержит переводы строк. Примерно так:
    ExpandedWrap disabled
                      while (prev != null)
                      {
                          if (!prev.IsTemperatureNull())
                              sb.Insert(0, String.Format("Temperature: {0} F{1}{1}", prev.Temperature, Environment.NewLine));
                          sb.Insert(0, GetQuestionTextForCoolingCategory(prev));
       
                          prev = DataContext.Current.GetPrevQuestion(prev, GetNextPrevQuestionMode.InGroup);
                      }
       
                      sb.Append(GetQuestionTextForCoolingCategory(lastQuestionRow));
                      if (!lastQuestionRow.IsTemperatureNull())
                          sb.AppendFormat("Temperature: {0} F{1}{1}", lastQuestionRow.Temperature, Environment.NewLine);
       
                      lastQuestionRow.Comments = lastQuestionRow.IsCommentsNull() ? sb.ToString() : String.Format("{0}{1}--{1}{2}", sb, Environment.NewLine, lastQuestionRow.Comments);
       
      *******
       
                      _currentComment = DataContext.Current.QuestionRow.Comments;
       
      *******
       
                  notesTextBox.Text = _currentComment;


    Все работает отлично. В текстбоксе находится строка с переводом строк.
    Потом приложение передает эту строку на сервер.
    Потом приложение получает эту же строку с сервера.

    И при простом присвоении этой строки:
    ExpandedWrap disabled
                  _currentComment = DataContext.Current.QuestionRow.Comments;
                  notesTextBox.Text = _currentComment;


    В тектстбоксе находится одна строка с квадратиками вместо перевода строк. Причем на каждый перевод строки приходится _один_ квадратик.

    Полученная строка, которая находится в _currentComment перед присвоением текстбоксу, под отладчиком выглядит правильно. В ней находятся все '\r\n' в нужных местах.

    Если же перед пресвоением текстбоксу "пересобрать строку" примерно так:

    ExpandedWrap disabled
                  var lines = _currentComment.Replace(Environment.NewLine, "\n").Split('\n');
                  var sb = new StringBuilder(_currentComment.Length * 2);
       
                  foreach (var line in lines)
                  {
                      if (sb.Length > 0)
                          sb.Append(Environment.NewLine);
       
                      sb.Append(line);
                  }
       
                  notesTextBox.Text = sb.ToString();


    То все отображается правльно.

    В чем проблема? Как это это лечится нормальными средствами, без извращений?

    Мультилайн у текстбокса стоит... естетственно... AcceptsReturn тоже... хотя я его по всякому пробовал.

    Почему пропадет только один символ? (квадратик то один, значит один правильно обрабатывается)

    Кто может сталкивался?
      Думаю, надо смотреть, что на сервере происходит...
        Я смотрел. Ничего не увидел особенного. Возвращается обычная строка. С обычными \r\n. Если из под отладчика ее скопировать в любой текстовый редактор, то все отображается как положено с переносами.

        Что именно нужно посмотреть?
        Сообщение отредактировано: Felan -
          А как она возвращается ? Возможно метод, который это делает, как-то преобразует спец. символы.
            Цитата IL_Agent @
            А как она возвращается ?

            WCF сервис возвращает XML. Строка - значение одного из элементов.

            Потом этот XML грузится в датасет.

            Потом из датасета я ее беру и присваюваю текстбоксу.


            Цитата IL_Agent @
            Возможно метод, который это делает, как-то преобразует спец. символы.

            Ну например как?
            Я же говорю, что смотрю под отладчиком, все наместе. Смотрю я преям перед самым присвоением тестбоксу. Т.е. уже на клиенте и уже ничего с ней потом не происходит.

            Кстати, забыл упомянуть, что если эту строку из под отлачика скопировать в текстовый редактор (пробовал np и np++), то все отображается правильно.
            И еще, на эмуляторах тоже все отображается правильно.

            Проблема только на реальных устройствах.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0272 ]   [ 16 queries used ]   [ Generated: 28.03.24, 11:22 GMT ]