现在的需求是:显示搜索结果时希望把用户输入的关键词加亮显示(比如显示为红色)。
如果是 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 效果,很遗憾这个西方人没有考虑中文、日文等亚洲语言显示问题。不过你可以参考我的实现代码,解决这个小问题。
打印 | 张贴于 2004-12-17 09:58:00 | Tag:暂无标签
留言反馈
header = "{\\rtf1\\ansi\\ansicpg936\\deff0\\deflang1033\\deflangfe2052";
修改 RtfFontTable.cs:
public RtfFontTable()
{
//
// TODO: Add constructor logic here
//
fonttbl = "{\\fonttbl{\\f0\\fnil\\fcharset1 Times New Roman;}";
fonttbl+= "{\\f1\\fnil\\fcharset2 Kingsoft Phonetic Plain;}";
loadedFonts.Add("Times New Roman",0);
loadedFonts.Add("Kingsoft Phonetic Plain", 1);
numberOfFonts=1;//没有这行应该是源码的bug。
}
public int UseFont(string fontName)
{
if (loadedFonts.Contains(fontName))
{
return (int)loadedFonts[fontName];
}
else
{
fonttbl += "{\\f" + (++numberOfFonts) + "\\fnil\\fcharset1 " + fontName + ";}";
loadedFonts.Add(fontName, numberOfFonts);
return numberOfFonts;
}
}
应当可以解决中文显示和音标显示的问题。
就象Word一样,可以在<段落/行高?里面调整行间距?
非常感谢
我想把richtextbox当作一个多功能label用,请问如何在richtextbox的text属性中添加多样式的文本,和控制符(最好还能有图片)。
如不能实现,请问如何在代码中实现
StreamReader reader = new StreamReader(new FileStream("..\\..\\readme.xml", FileMode.Open))
to
StreamReader reader = new StreamReader(new FileStream("..\\..\\readme.xml", FileMode.Open),Encoding.Default);
then it can support chinese!:)
现在才知道richtextbox有这个功能哈哈