C# 在System.Windows.Forms.RichTextBox中存储任意应用程序数据

C# 在System.Windows.Forms.RichTextBox中存储任意应用程序数据,c#,winforms,richtextbox,rtf,C#,Winforms,Richtextbox,Rtf,有人知道在用户看不到这些数据的情况下将任意数据存储在RichTextBox中的方法吗?2007年RTF规范包括注释(“\atnid”、“\atnautor”、“\annotation”等),但每当我将它们插入RichTextBox的.RTF,注释就会消失(可能是因为RichTextBox不支持RTF注释)。这两种解决方案都是可以接受的。蒂亚 我尝试的是这样的: string objectXml = MySerialization.ToXml(object); string commentRtfF

有人知道在用户看不到这些数据的情况下将任意数据存储在
RichTextBox
中的方法吗?2007年RTF规范包括注释(“\atnid”、“\atnautor”、“\annotation”等),但每当我将它们插入
RichTextBox
.RTF
,注释就会消失(可能是因为
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保持一致。因此,虽然可以将元数据持久保存在control.Tag中,但我必须自己负责将信息添加到数据库中,注意用户何时编辑RTF,并在编辑后以某种方式确定元数据的新位置。

我不知道是否有任何特殊方法可以对RTF文档执行此操作,但是,如果您只想在控件(任何类型的
控件
)中存储一些数据而不向用户显示,您可以使用
标记
属性,如图所示:

我认为ho1的想法是正确的。Control.Tag是一个对象,因此您可以使用诸如List、Hash、Dictionary等通用数据结构来存储多个注释,并将其存储在Tag属性中。

richtext控件支持带\v的隐藏词,并使用\v0和否关闭隐藏,我没有混淆它们,即使在逻辑上\v代表可见,但它的作用正好相反。

我认为使用atandb的响应将提供正确的解决方案。您可以使用\v和\v0隐藏中间的数据,并将该隐藏数据作为特定数据访问到该特定位置

我在richtextbox中进行了尝试,rtf属性支持这一点,并且它不会通过跳过控制代码来修改rtf内容。我也遇到了同样的问题,幸运的是我最终得到了这个页面,现在我能够为rtf数据中的任何位置提供一些注释/注释之类的功能


非常感谢您的提问和回答。

不幸的是,我要求每个RichTextBox控件有多个注释,并且我希望结果保存到存储richtext的数据库中。此外,注释必须与RTF中的特定位置匹配,我认为将信息存储在控件的标记中不允许这样做。卡尔:好吧,你可以将整个RTF存储在
标记中,而不仅仅是注释。当然,这将是数据的重复,因为非注释数据将同时出现在
标记和“视图”中,但至少您仍然拥有未删除的数据。但是,如果用户编辑RTF,我将不知道元数据在RTF中的“位置”。我使用元数据来对应RTF中的特定位置(即引文字段在这里,这些是它的特征)。如果我将RTF存储在标记中,但用户在控件中编辑RTF,我将无法知道“引文字段又在哪里?”我(想我)需要一种方法将某些内容插入RTF,以便即使在RTF编辑过程中,元数据也具有正确的位置。@Carl:忘记了您可能希望让用户编辑文本。。。可能是某个商业控件让你这么做,尽管我唯一能访问的控件(DevExpress提供的XtraRichEdit)有一个打开的功能请求(),他们说他们要添加它,所以我假设它还不在那里。也许值得一看Telerik和ComponentOne etcI,他们认为这个想法是用RTF保存应用程序数据,这样他就可以用文档保存状态。@Ron是的,我想用RTF保存元数据。我还需要元数据对应于它最初插入的特定RTF位置,即使用户执行RTF编辑来移动该位置。如果你熟悉的话,可以把它想象成一个看不见的词域。我希望在特定位置存储一些数据,并使该位置通过RTF在用户编辑中流动。