获取由 richtextbox 中的标签链接返回的信息 (.NET FORMS)

Get infos returned by a labellink in a richtextbox (.NET FORMS)

我无法将 labelLink 返回的信息放入 richtextbox。

我在 RichTextBox 中有文本,我这样创建标签link。

$Textlink = New-Object System.Windows.Forms.LinkLabel
$Textlink.text = "AMIGA"
$Textlink.Name = "AMIGALINK"
$Textlink.add_LinkClicked($Textlink_LinkClicked)
$ClassicRTB1.Controls.Add($Textlink)

它在我名为 $ClassicRTB1

的 RichTextBox 中添加了一个可点击的 AMIGA link

我在点击按钮时完成了这个 powershell 语句

$Textlink_LinkClicked = {
$ClassicRTB1.Clear()
$message = $_.linktext
$ClassicRTB1.AppendText("$message  `n") }

它很好地执行了行 $ClassicRTB1.Clear() 但我没有返回变量 $_ for .linktext :(

我整天尝试了很多代码,但什么也没找到...我做错了吗?

tl;dr

# This assumes that you've actually assigned a URL to the 
# $TextLink instance - see the bottom section for how to do that.
$Textlink_LinkClicked = {

  # Declare the event delegate's parameters.
  param($evtSender, $evtArgs)

  # Retrieve the target info (typically, a URL) associated 
  # with the link that was clicked.
  $message = $evtArgs.Link.LinkData

  $ClassicRTB1.AppendText("$message  `n") 

}

基于 Mathias 的有益评论:

  • 您的主要问题是您错误地尝试引用事件发送者(link-label object) via $_,这是错误的 automatic variable 使用方式。

    • 在最简单的情况下,使用自动 $this 变量

    • 或者,假定脚本块接收通常的 event-delegate 参数 - 事件的发送者和事件的参数 - 您可以通过自动 $args 变量引用它们:

      • $args[0] 也指事件发送者,$args[1] 指事件参数。
      • 一个更具描述性但更冗长的替代方法是正式声明这些参数的参数param($evtSender, $evtArgs),如顶部部分所示。
    • 注:

  • 你的次要问题是一个LinkLabel实例没有.LinkText属性. [1]

    • 相反,这样的实例有一个 集合 link 存储在 .Links 属性 中,并且该集合的每个 LinkLabel.Link 元素都有一个 .Data 属性 包含目标数据(通常是 URL 字符串 ,但从技术上讲它可以是任何对象)

      • 一个 link 默认存在,下面是如何设置它的示例:

        $Textlink.Links[0].LinkData = 'https://example.org'
        
    • 因为单个 link-label 可能容纳 多个 links - 如果配置,多个 子串 其标签 (.Text 属性) - 响应点击的可靠方法不是检查 link-label 实例 本身,但要使用 事件参数 来告诉您 实际点击了哪个特定 link

      • 传递给事件委托的 event-arguments 对象的 .Link 属性 标识其特定的 link,其 .Data 属性 包含link 的目标。

[1] 您可能会想到 event-arguments 对象的 .LinkText 属性 如果您响应 LinkClicked 则可用RichTextBox 实例本身的事件,响应于单击该实例 自身 提供的 link,因为识别其文本中的原始 URL (并且,在 .NET (Core) 中,还通过 .Rtf 分配了 RTF hyperlinks)并将它们变成可点击的 links.