关于C#在RichTextBox中添加超链接

最近都在做一个能在Winform的RichTextBox中添加像网页中的超链接<a></a>的形式,在网上找很多,大部分有两种方式,一个是把控件的DetectUrls属性改为true,这样在控件上直接输入网址控件直接可以检测到,再以链接形式显示,这样做的话与目的相差有点远。另外一种方法就是使用linklabel,具体使用也不说了,但是这样做就不能编辑,而已都悬浮在文字上面,看起来不爽。

  但是我在codeproject这个论坛上找到一个,重写了richtextbox控件,可以直接添加文字超链接,与网页上的效果一样,下载地址:Download source files and demo project - 23 Kb

  但是保存了rtf后再显示出来就有问题了,链接不见了。

  于是我就再他的基础上修改了下,就在他的添加方法:

View Code
 1 public void InsertLink(string text, string hyperlink, int position)
 2 {
 3 if (position < 0 || position > this.Text.Length)
 4 throw new ArgumentOutOfRangeException("position");
 5 
 6 this.SelectionStart = position;
 7 this.SelectedRtf = @"{\rtf1\ansi "+text+@"\v #"+hyperlink+@"\v0}";
 8 this.Select(position, text.Length + hyperlink.Length + 1);
 9 this.SetSelectionLink(true);
10 this.Select(position + text.Length + hyperlink.Length + 1, 0);
11 }

里面的:

this.SelectedRtf = @"{\rtf1\ansi "+text+@"\v #"+hyperlink+@"\v0}";

在自己需要添加的超链接文字前后添加rtf标签,比如 <! !>

变成:

this.SelectedRtf = @"{\rtf1\ansi  <! "+text+@" !>\v #"+hyperlink+@"\v0}";

这样的话,把richtextbox的rtf保持起来,再显示的时候,把这个rtf赋给控件的rtf,会显示<! text !>

把我添加的标志也显示出来了,这样还没达到效果,仔细观看他原来的代码中出现个/v /v0,这对标签原来是用来隐藏位于中间的字符串的,于是就再之前添加的<! !>,放在/v /v0之间,这样就可以把自己添加的标签隐藏起来,这样就会达到超链接的效果了,但是呢,这样还不行,因为把保存起来的rtf再赋值给控件的rtf,超链接还是不见了,我就采用了一个很笨的方法,在重写控件的里面添加一个方法,就是先把rtf转换为文本,这样文本种就会出现<! text#hyperlink !>,我自己就把这段字符串以<!和!>拆开,然后获取到text和hyperlink然后再调用上面的方法InsertLink。一段一段的添加到控件上,显示出来的就真的是超链接了,最后当然还要调用richTextBoxEx1_LinkClicked这个事件处理点击后的相关处理啦。

好了。代码就不上了,自己说的感觉有点乱乱的,第一次发博。如果您好什么好的建议好的想法,欢迎留言!

谢谢

posted @ 2013-03-01 22:02  清风伴你行  阅读(5311)  评论(3编辑  收藏  举报