關於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這個事件處理點擊后的相關處理啦。

好了。代碼就不上了,自己說的感覺有點亂亂的,第一次發博。如果您好什么好的建議好的想法,歡迎留言!

謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM