C# 超链接到C中RichTextBox的一行#
我正在寻找一种在RichTextBox中创建超链接的方法,该超链接指向同一RichTextBox的一行文本 我刚刚找到了如何使用Internet链接来实现这一点,但我没有找到一种方法来使用控件内的相同文本(就像MS Word中指向标题或书签的超链接)C# 超链接到C中RichTextBox的一行#,c#,visual-studio,text,hyperlink,richtextbox,C#,Visual Studio,Text,Hyperlink,Richtextbox,我正在寻找一种在RichTextBox中创建超链接的方法,该超链接指向同一RichTextBox的一行文本 我刚刚找到了如何使用Internet链接来实现这一点,但我没有找到一种方法来使用控件内的相同文本(就像MS Word中指向标题或书签的超链接) 提前谢谢CCB不,除非您自己编写必要的代码,否则这将不起作用 两项建议: 一个简单的解决方法,链接总是以www. 使用任意链接文本的更好解决方案 让我们看看这两个选项..: 使用识别URL的内置功能似乎是正确的开始方式,但链接必须始终看起来像
提前谢谢CCB不,除非您自己编写必要的代码,否则这将不起作用 两项建议:
- 一个简单的解决方法,链接总是以
www.
- 使用任意链接文本的更好解决方案
- 使用识别URL的内置功能似乎是正确的开始方式,但链接必须始终看起来像URL,而不是指向锚的超链接。。如果你能接受这样的解决方案,比如说,有这样的链接:
和这样的锚定:www.goto.234
这真的很简单234
private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
{
var s = e.LinkText.Split('.');
string anchor = s[2];
int a = richTextBox1.Text.IndexOf("#" + anchor + "#" );
if (a >= 0) richTextBox1.SelectionStart = a; else return; // do add more checks!
richTextBox1.SelectionLength = 0;
Text = anchor + " @ " + a;
//richTextBox1.ScrollToCaret(); <<--- this crashes on my machine!
// so I take the jump out of the click event and it works:
Timer ttt = new Timer() { Interval = 100 };
ttt.Tick += (ss, ee) => { richTextBox1.ScrollToCaret(); ttt.Stop(); };
}
private void richTextBox1\u LinkClicked(对象发送者,LinkClickedEventArgs e)
{
var s=e.LinkText.Split('.');
锚索=s[2];
int a=richTextBox1.Text.IndexOf(“#”+anchor+“#”);
如果(a>=0)richTextBox1.SelectionStart=a;否则返回;//请添加更多检查!
richTextBox1.SelectionLength=0;
文本=锚定+“@”+a;
//richTextBox1.ScrollToCaret();不,除非您自己编写必要的代码,否则这将不起作用
两项建议:
- 一个简单的解决方法,链接总是以
www.
- 使用任意链接文本的更好解决方案
让我们看看这两个选项..:
- 使用识别URL的内置功能似乎是正确的开始方式,但链接必须始终看起来像URL,而不是指向锚的超链接。如果你能接受这样的解决方案:
www.goto.234
和这样的锚定:\234
,这真是太令人失望了嗯
一个工作示例可以如此简单:
private void richTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
{
var s = e.LinkText.Split('.');
string anchor = s[2];
int a = richTextBox1.Text.IndexOf("#" + anchor + "#" );
if (a >= 0) richTextBox1.SelectionStart = a; else return; // do add more checks!
richTextBox1.SelectionLength = 0;
Text = anchor + " @ " + a;
//richTextBox1.ScrollToCaret(); <<--- this crashes on my machine!
// so I take the jump out of the click event and it works:
Timer ttt = new Timer() { Interval = 100 };
ttt.Tick += (ss, ee) => { richTextBox1.ScrollToCaret(); ttt.Stop(); };
}
private void richTextBox1\u LinkClicked(对象发送者,LinkClickedEventArgs e)
{
var s=e.LinkText.Split('.');
锚索=s[2];
int a=richTextBox1.Text.IndexOf(“#”+anchor+“#”);
如果(a>=0)richTextBox1.SelectionStart=a;否则返回;//请添加更多检查!
richTextBox1.SelectionLength=0;
文本=锚定+“@”+a;
//richTextBox1.ScrollToCaret();我简化了我的答案。我简化了我的答案。“www.goto.123”指向#123#文本,与“www.goto.12x”相同。“www.goto.Top”指向RichTextBox开头的#Top#文本,告诉我是否理解错了你的示例。现在,超链接确实需要这种格式(www…)?是的,这就是使用linkclicked事件的问题。您可以选择任何锚定界符;可以随意使用它们,看看是否可以为您的案例工作。您的内容是statix还是可编辑的?哦,好的,锚定界符是您编写的标签和波浪形符号吗?或者它们是www…和.goto?是的,我的内容是w我将是可编辑的。确实。如果用户创建链接和锚定的方式是最简单的方式,或者是通过按钮和自动格式。我想我会选择第二种方式。哦,好的,谢谢!!我将尝试第二种方式,然后我会告诉你它是如何工作的。“www.goto.123”指向#123#文本,与“www.goto.12x”相同。并且“www.goto.Top”指向RichTextBox开头的#Top#文本,告诉我我是否理解错了您的示例。现在,超链接确实需要这种格式(www…)?是的,这就是使用linkclicked事件的问题。您可以选择任何锚定界符;可以随意使用它们,看看是否可以为您的案例工作。您的内容是statix还是可编辑的?哦,好的,锚定界符是您编写的标签和波浪形符号吗?或者它们是www…和.goto?是的,我的内容是w我将是可编辑的。确实。如果用户创建链接和锚,或者选择最简单的方法,或者通过按钮和自动格式支持。我想我会选择第二种方法。哦,好的,谢谢!!我将尝试第二种方法,然后我会告诉你它是如何工作的。