动态生成 rtf 并指定给 RichTextBox 控件

现在的需求是:显示搜索结果时希望把用户输入的关键词加亮显示(比如显示为红色)。

如果是 HTML 里面的操作,大家有各种 HTML 标记可以实现这样的效果,简单的方法比如直接用“<font color="red">xxxxx</font>”将关键词包围。现在,是在 Windows 窗体中。

或许我们嵌入一个 Browser 控件能够轻松的实现这样的效果,但对于这个需求来说它或许有点过于笨重了。我们希望使用 RichTextBox 来显示这个效果。

但 RichTextBox 支持的是 rtf 格式,rtf 和 HTML 不是同源语言,风格相差很远,还是需要花不少功夫去钻研 RTF 的规范的。

这里给出一段写好的 RTF 转换代码,供有兴趣的人参考,不过这段代码只实现了加亮这一个需求,或许还不满足您的实际需要,但我只是想给你点参考而已。使用时,只需很少的几行的代码,如:

string original = @"How <red>are</red> you? 中文<red>测试</red>文本 日本<red>語</red>のテスト";
RtfRenderer rr = new RtfRenderer(original);
richbox.Rtf = rr.Rtf;

另外,windowsforms.net 站点上 Eric Voreis 公开了一个Sample(链接已失效),可以将一部分常用的 HTML 标记(前提是已经按 XHTML 的要求完成了标记前后匹配的工作之后),转换为相应的 rtf 效果,很遗憾这个西方人没有考虑中文、日文等亚洲语言显示问题。不过你可以参考我的实现代码,解决这个小问题。

posted on 2004-12-17 09:58  破宝  阅读(197)  评论(0编辑  收藏  举报

导航