Foothill Ответов: 2

Wpf richtextbox - потеря разрывов строк при копировании/вставке


Мне нужен был текстовый элемент управления, который обеспечивал бы одностороннюю функцию копирования в буфер обмена, а также возможность форматирования определенных строк и части строк, поэтому я попробовал RichTextBox. Это работает довольно хорошо. Проблема заключается в том, что я выполняю операцию копирования и вставки в буфер обмена. Все разрывы строк ('\n') удаляются, и скопированный текст запускается вместе в одной строке.

Например:
Это строка 1.
Это строка 2.
Это строка 3.

Становится:
Это строка 1.это строка 2.Это строка 3.

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

// example
var myDoc = new FlowDocument();

foreach (MyDataObject dObj in dataFromDatabase)
{
  var para = new Paragraph();
  para.Inlines.Add(new Run(dObj.DataPoint1.ToString()));
  if (dObj.DataPoint2 > 3)
  {
    para.Inlines.Add(new Run("\nThis exceeds reporting threshold for blah, blah, blah,...")); // \n or \r it doesn't matter, they are both removed in copy/paste
  }
  // and other lines as required in the program logic
  
  myDoc.Blocks.Add(para);
}

myRichTextBox.Document = myDoc;


Что я уже пробовал:

Я искал в интернете, как это предотвратить, но все, что я нашел, - это замена возврата каретки ('\r') на разрыв строки, но это также не сработало.

Michael_Davies

Вы нашли это;

https://www.experts-exchange.com/questions/26895919/C-RichTextBox-contents-to-clipboard.html#a35180339

Foothill

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

2 Ответов

Рейтинг:
12

Foothill

Я нашел проблему, проблема не в '\r' или '\n', а в их положении в тексте. Если вы введете такие символы, как "\n\r", RichTextBox начнет двойной интервал между строками, а операция копирования\вставки выполнит строки вместе. Теперь, если вы перевернете их позиции, например "\r\n", RichTextBox отобразит их правильно, и операция копирования\вставки будет работать так, как должна. Мне нужно провести больше исследований, чтобы понять, почему это имеет значение, но это исправило проблему.


Richard Deeming

Windows всегда ожидает возврата каретки (\r) предшествовать линейной подаче (\n). Другие системы могут использовать просто возврат каретки (Macs), или просто линейный канал (UNIX, Linux). Но я не думаю, что какая-либо система использует перевод строки с последующим возвратом каретки.

Что объясняет, почему RichTextBox было бы двойное пространство между строками, но не очевидно, почему копирование/вставка будет их удалять.

Member 14263458

У меня есть та же проблема, которую вы описываете, но, видя странную разницу, я задаюсь вопросом, не могли бы вы объяснить?

Если я беру многострочный текст, который генерирует мое приложение, и помещаю его в буфер обмена, когда я вставляю его в приложение "Сообщения", все это выглядит нормально, но если я вставляю его в приложение "Заметки" или в сообщение Facebook - строки почти все очищаются (первые 3 работы). Все это происходит на одном устройстве (iPhone 8+ с iOS 12). В настоящее время я использую только \n.

Есть идеи, что происходит?

Рейтинг:
1

johnbsys

добавьте AcceptsReturn="True" в свой текстовый ящик.