如何使用 powershell 和 WPF 构建动态 link 列表?

How to build dynamic link list with powershell and WPF?

我有一个可变长度的数组,其中包含多个网站名称和相应的链接。我将在 Windows 基于表单的 GUI 中显示它们。

数组将从 XML 文件中读取,但看起来像这样

$linklist = @(
("Site 1" , "https://link1.com"),
("Site 2" , "https://link2.com")
)

然后我有一个名为 "mainform" 的 Windows 表单 window 并在其中创建每个项目:

$Link1 = New-Object System.Windows.Forms.LinkLabel
$Link1.Text = $sitename
$Link1.Location = New-Object System.Drawing.Point(40,$calculatedPosition)
$Link1.add_Click({ start $sitelink })
$mainform.Controls.Add($Link1)

这可以为我的数组中的每个项目手动完成 - 到目前为止,非常简单,因为我的数组中有固定数量的项目。

但我喜欢动态地进行处理,以处理具有自定义内容的数组。

我尝试使用动态变量,因为每个 LinkLabel 都需要不同的变量名。 我知道,动态变量名称可以由 New-Variable Cmdlet 创建,但我不知道如何管理这个新变量来构建 LinkLabel。

预先感谢您提供所有有用的想法...

我会首先从您的 $linklist 数组中创建一个有序的哈希表,以使事情变得更容易:

$linklist = @(
("Site 1" , "https://link1.com"),
("Site 2" , "https://link2.com")
)

# convert the array of arrays into an ordered Hashtable
$linkHash = [ordered]@{}
$linklist | ForEach-Object { $linkHash[$_[0]] = $_[1] }

使用该哈希表,动态创建链接标签并不难:

$linkHash.GetEnumerator() | ForEach-Object {
    $lnk = New-Object System.Windows.Forms.LinkLabel
    $lnk.Text = $_.Name   # set the name for the label
    $lnk.Tag  = $_.Value  # store the link url inside the control's Tag property
    $lnk.Location = New-Object System.Drawing.Point(40, $calculatedPosition)
    # inside the scriptblock, $this refers to the LinkLabel control itself
    $lnk.Add_Click({ Start-Process $this.Tag })  
    $mainform.Controls.Add($lnk)
    $calculatedPosition += 15   # just a guess, you may want different vertical spacing
}