繁体   English   中英

在RichTextBox中使用受保护的文本还原/重做

[英]undo/redo with protected text in RichTextBox

我们正在使用RichTextBox来显示文本。 我们在撤消/重做受保护文本方面遇到了问题。

这是工作流程,通常我们使用纯文本,在这种情况下,撤消/重做效果很好。 有时我们需要将某些文本标记为“受保护”。 我们进行验证并即时转换Rtf,然后执行以下操作将其分配回RTB:

m_rtbText.Rtf = sRtf

问题是经过这条线之后,

m_rtbText.CanUndo

属性将在内部设置为False,因此我们丢失了所有撤消步骤。 举一个例子,这是验证之前的样子:

\cf1\i0\v\f2 <PSI_START_OBJECT><PSI_MEDIA><Media2><MediaID>16346</MediaID><Name>\f3\rtlch\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9</\f2\ltrch Name><FileName>N:\\media\f3\rtlch\\\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9_1.\f2\ltrch wav</FileName><Length>00:00:33.0</Length><OutCue></OutCue><Description></Description></Media2><PSI_MID_OBJECT\f3\rtlch >\v0\f0\'c7\'e1\'ca\'de\'d1\'ed\'d1 \'c7\'e1\'c5\'ce\'c8\'c7\'d1\'ed : \cf2\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9\par
 \cf1\'c7\'e1\'e3\'cf\'f8\'c9 : \cf2\f3 00:00:33.0\cf3\i\f4 .\v <\f1\ltrch PSI_END_OBJECT\f4\rtlch >\cf0\v0\f1\ltrch\par

验证后如下所示:

\cf1\i0\protect\v\f2 <PSI_START_OBJECT><PSI_MEDIA><Media2><MediaID>16346</MediaID><Name>\f3\rtlch\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9</\f2\ltrch Name><FileName>N:\\media\f3\rtlch\\\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9_1.\f2\ltrch wav</FileName><Length>00:00:33.0</Length><OutCue></OutCue><Description></Description></Media2><PSI_MID_OBJECT\f3\rtlch >\v0\f0\'c7\'e1\'ca\'de\'d1\'ed\'d1 \'c7\'e1\'c5\'ce\'c8\'c7\'d1\'ed : \cf2\'e4\'d4\'d1\'c9 \'cc\'e6\'ed\'c9\par
 \cf1\'c7\'e1\'e3\'cf\'f8\'c9 : \cf2\f3 00:00:33.0\cf3\i\f4 .\v <\f1\ltrch PSI_END_OBJECT\f4\rtlch >\cf0\protect0\v0\f1\ltrch\par

如您所见,这里唯一的区别是2个“保护”条目。 在文字方面,它们是完全相同的。

这可能是Microsoft的错误,还是我缺少了什么? 仅供参考,我们在.NET Framework 4.6.2,VS2015 Update3上

多亏了dlatikay,看来我们不能直接使用Rtf分配,否则将导致撤消堆栈丢失。 另一种方法是使用“选定的Rtf”。 以下代码有效:

m_rtbText.SelectionStart = 0;
m_rtbText.SelectAll();
m_rtbText.SelectedRtf = sRtf;

这基本上是一个替代。 撤消将保留。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM