C# 超链接到C中RichTextBox的一行#

C# 超链接到C中RichTextBox的一行#,c#,visual-studio,text,hyperlink,richtextbox,C#,Visual Studio,Text,Hyperlink,Richtextbox,我正在寻找一种在RichTextBox中创建超链接的方法,该超链接指向同一RichTextBox的一行文本 我刚刚找到了如何使用Internet链接来实现这一点,但我没有找到一种方法来使用控件内的相同文本(就像MS Word中指向标题或书签的超链接) 提前谢谢CCB不,除非您自己编写必要的代码,否则这将不起作用 两项建议: 一个简单的解决方法,链接总是以www. 使用任意链接文本的更好解决方案 让我们看看这两个选项..: 使用识别URL的内置功能似乎是正确的开始方式,但链接必须始终看起来像

我正在寻找一种在RichTextBox中创建超链接的方法,该超链接指向同一RichTextBox的一行文本

我刚刚找到了如何使用Internet链接来实现这一点,但我没有找到一种方法来使用控件内的相同文本(就像MS Word中指向标题或书签的超链接)


提前谢谢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我将是可编辑的。确实。如果用户创建链接和锚,或者选择最简单的方法,或者通过按钮和自动格式支持。我想我会选择第二种方法。哦,好的,谢谢!!我将尝试第二种方法,然后我会告诉你它是如何工作的。