winform 后台通过rtf实现richtextbox自定义文本超链接

dann2004 2012-05-28 09:58:45
winform 后台通过rtf实现richtextbox自定义文本超链接
/// <param name="text">自定义文本</param>
/// <param name="hyperlink">目标地址(可是URL地址,或者是文件路径)</param>
/// <param name="position">Insert position</param>
public void InsertLink(string text, string hyperlink, int position)
{
if (position < 0 || position > this.Text.Length)
throw new ArgumentOutOfRangeException("position");

this.SelectionStart = position;
this.SelectedRtf = @"{\rtf1\ansicpg936\" + text + @"\v #" +hyperlink + @"\v0}";
this.Select(position, text.Length + hyperlink.Length + 1);
this.SetSelectionLink(true);
this.Select(position + text.Length + hyperlink.Length + 1, 0);
}

前台:private void commRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e)
{
string uri = e.LinkText.Substring(e.LinkText.IndexOf('#') + 1, e.LinkText.Length - e.LinkText.IndexOf('#') - 1);

现在情况是:1:当文件路径中包含英文 英文被抹杀掉
2:文件路径“\”全部丢失掉


麻烦各位给点建议 感谢
...全文
299 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dann2004 2012-05-28
  • 打赏
  • 举报
回复
我在网上也找了 方法都差不多 关键远离还是这
希望大家给点建议 指点指点
dann2004 2012-05-28
  • 打赏
  • 举报
回复
public void InsertLink(string text, string hyperlink, int position)
{
if (position < 0 || position > this.Text.Length)
throw new ArgumentOutOfRangeException("position");
string newUrl = hyperlink.Replace("\\","&");//新加了转换
this.SelectionStart = position;
this.SelectedRtf = @"{\rtf1\ansicpg936\" + text + @"\v #" +hyperlink + @"\v0}";
//@"par\qj\kerning2\f0\fs21 bb{\field{\*\fldinst{HYPERLINK "0001"}";
//this.SelectedRtf = @"{\rtf1\ansicpg936\ " + TextToRtf(text) + @"/v" + TextToRtf(hyperlink) + @"/v0}";
this.Select(position, text.Length + hyperlink.Length + 1);
this.SetSelectionLink(true);
this.Select(position + text.Length + hyperlink.Length + 1, 0);
}

参数是 text=“打开文件”
hyperlink= E:\日志\Log\行政区划.txt

commRichTextBox_LinkClicked事件
string uri = e.LinkText.Replace("&", "\\");//新加转换
string newUri = uri.Substring(e.LinkText.IndexOf('#') + 1, e.LinkText.Length - e.LinkText.IndexOf('#') - 1);
newUri =E:日志行政区划.txt
。。。。所以这转化我有点没明白 麻烦说具体点
dann2004 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

替换一下就可以了啊
[/Quote]

你是说的在传参的时候把//给转换是吧 E:\日志\Log\行政区划.txt
我在RTF转换之前加了 string newUrl = hyperlink.Replace("\\","&");
commRichTextBox_LinkClicked 再转换回来 string uri = e.LinkText.Replace("&", "\\");
但路径依然是 E:日志行政区划.txt
英文还是掉了 \也掉了
熙风 2012-05-28
  • 打赏
  • 举报
回复
替换一下就可以了啊

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧