获取由 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)
,如顶部部分所示。
注:
- Event-related 自动变量,例如
$Sender
are not available - they only apply to script blocks passed to the -Action
parameter of the Register-ObjectEvent
and Register-EngineEvent
cmdlet。
你的次要问题是一个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.
我无法将 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)
,如顶部部分所示。
注:
- Event-related 自动变量,例如
$Sender
are not available - they only apply to script blocks passed to the-Action
parameter of theRegister-ObjectEvent
andRegister-EngineEvent
cmdlet。
- Event-related 自动变量,例如
你的次要问题是一个
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 的目标。
- 传递给事件委托的 event-arguments 对象的
[1] 您可能会想到 event-arguments 对象的 .LinkText
属性 如果您响应 LinkClicked
则可用RichTextBox
实例本身的事件,响应于单击该实例 自身 提供的 link,因为识别其文本中的原始 URL (并且,在 .NET (Core) 中,还通过 .Rtf
分配了 RTF hyperlinks)并将它们变成可点击的 links.