Хранить произвольные данные приложения в System.Windows.Forms.RichTextBox - PullRequest
2 голосов
/ 30 сентября 2010

Кто-нибудь знает способ хранения произвольных данных в RichTextBox без возможности просмотра этих данных пользователем? Спецификация RTF 2007 года включает в себя аннотации ("\ atnid", "\ atnauthor", "\ annotation" и т. Д.), Но всякий раз, когда я вставляю их в .Rtf *1003*, аннотации исчезают (предположительно потому, что RichTextBox не поддерживает аннотации в формате RTF.) У меня есть связанный вопрос о том, возможно ли хранить информацию внутри образа метафайла . Любое из этих решений будет приемлемым. ТИА.

Я пытаюсь что-то вроде этого:

string objectXml = MySerialization.ToXml(object);
string commentRtfFragment = String.Format(@"{{\*\atnid MyApp}}{{\*\atnauthor MyApp}}{{\*\annotation {0}}}", objectXml);

string imageRtf = String.Format(@"{{\rtf1 {{\pict\wmetafile{0}\picw{1}\pich{2}\picwgoal{3}\pichgoal{4} {5}}}{6}}}",
    PixelMappingMode.MM_ANISOTROPIC, picw, pich, picwgoal, pichgoal, imageHex, commentRtfFragment);
richTextBox.SelectedRtf = imageRtf;

Обновление: метаданные приложения («аннотации») должны соответствовать определенным местоположениям в RTF. Также будет несколько аннотаций для RichTextBox (или документа RTF, если хотите). Я также хочу, чтобы метаданные сохранялись с RTF. Таким образом, хотя было бы возможно сохранить метаданные в элементе управления. Метка, я должен был бы позаботиться о добавлении информации в базу данных сам, отмечая всякий раз, когда пользователь редактировал RTF, и каким-то образом определял новое местоположение метаданных после редактировать.

Ответы [ 4 ]

1 голос
/ 31 марта 2012

Я думаю, что ответ с помощью atandb даст правильное решение. Вы можете использовать \ v и \ v0, чтобы скрыть промежуточные данные и получить доступ к этим скрытым данным как к конкретным данным в этом конкретном месте.

Я попытался в richtextbox, и свойство rtf поддерживает это, и оно не изменяет содержимое rtf, пропуская управляющий код. У меня была та же проблема, и я, к счастью, оказался на этой странице, и теперь у меня есть возможность добавлять аннотации / комментарии, например, для любого места в данных RTF.

Большое спасибо Карл за ваш вопрос и AtanDB за ваш ответ.

0 голосов
/ 30 сентября 2010

Я думаю, что у ho1 правильная идея. Control.Tag - это объект, поэтому вы можете использовать общую структуру данных, такую ​​как List, Hash, Dictionary и т. Д., Чтобы сохранить несколько аннотаций и сохранить их в свойстве Tag.

0 голосов
/ 17 октября 2010

Элемент управления richtext поддерживает скрытые слова с \ v и выключает скрытые с \ v0, и нет, я не путаю их, даже если логически \ v будет означать видимое, это наоборот.

0 голосов
/ 30 сентября 2010

Я не знаю, есть ли какой-то особый способ сделать это для документов RTF, но если вы просто хотите сохранить некоторые данные в элементе управления (любой тип Control), не показывая их пользователю, вы можете использовать Tag свойство, которое можно увидеть здесь: Control.Tag

...