You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Basic中RichTextBox添加多组可点击文本链接失败问题

RichTextBox嵌入多组可点击自定义链接问题

在VB WinForm开发中,要在RichTextBox里嵌入多组非URL格式的可点击高亮文本,单组链接能正常显示且点击后控制台输出对应文本,但添加第二组链接后,第二个链接完全看不到。

单链接正常运行代码

Public Class Form1
    Dim linktarget As String = ""
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim lnk1 As New LinkLabel
        CreateLink(lnk1, "This is the Target", "Description of Link")
        txtBox.Controls.Add(lnk1)
    End Sub
    Public Sub CreateLink(lnk As LinkLabel, linkTarget As String, linkText As String)
        lnk.LinkColor = Color.Blue
        Dim lk As LinkLabel.Link = lnk.Links.Add(0, linkText.Length, linkTarget)
        lnk.Text = linkText
        AddHandler lnk.LinkClicked, AddressOf LinkClicked
    End Sub
    Private Sub LinkClicked(ByVal sender As Object, ByVal e As EventArgs)
        'send link to the browser
        Console.WriteLine(sender.Text)
    End Sub
End Class

添加第二个链接后无显示的代码

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim lnk1 As New LinkLabel
    CreateLink(lnk1, "This is the Target", "Description of Link")
    txtBox.Controls.Add(lnk1)
    Dim lnk2 As New LinkLabel
    CreateLink(lnk2, "Another Target", "Description of 2nd Link")
    txtBox.Controls.Add(lnk2)
End Sub

问题原因

直接将LinkLabel控件添加到RichTextBox的Controls集合时,新创建的LinkLabel默认和第一个控件的Location属性一致(均为(0,0)),导致第二个LinkLabel被第一个完全遮挡,所以无法看到。

解决办法

方案1:调整LinkLabel位置避免重叠

手动设置每个LinkLabel的位置,让它们依次排列:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim lnk1 As New LinkLabel
    CreateLink(lnk1, "This is the Target", "Description of Link")
    txtBox.Controls.Add(lnk1)
    
    Dim lnk2 As New LinkLabel
    CreateLink(lnk2, "Another Target", "Description of 2nd Link")
    ' 将第二个链接放在第一个链接的下方,避免重叠
    lnk2.Location = New Point(lnk1.Location.X, lnk1.Location.Y + lnk1.Height + 8)
    txtBox.Controls.Add(lnk2)
End Sub

方案2:直接在RichTextBox文本中创建自定义链接(更符合嵌入需求)

如果需要把链接和普通文本混排,建议使用RichTextBox自身的链接功能,无需额外添加LinkLabel控件:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 先添加包含链接文本的内容
        txtBox.Text = "这里是第一组链接:Description of Link,这里是第二组链接:Description of 2nd Link"
        
        ' 创建第一个自定义链接
        txtBox.Select(txtBox.Text.IndexOf("Description of Link"), "Description of Link".Length)
        txtBox.Links.Add(txtBox.SelectionStart, txtBox.SelectionLength, "This is the Target")
        
        ' 创建第二个自定义链接
        txtBox.Select(txtBox.Text.IndexOf("Description of 2nd Link"), "Description of 2nd Link".Length)
        txtBox.Links.Add(txtBox.SelectionStart, txtBox.SelectionLength, "Another Target")
        
        ' 设置链接显示样式
        txtBox.LinkColor = Color.Blue
        txtBox.ActiveLinkColor = Color.Red
        AddHandler txtBox.LinkClicked, AddressOf RichTextBoxLinkClicked
    End Sub
    
    Private Sub RichTextBoxLinkClicked(sender As Object, e As LinkClickedEventArgs)
        ' 输出链接对应的目标内容
        Console.WriteLine(e.LinkData.ToString())
    End Sub
End Class

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:31:00