winforms - 如何使用Powershell和WPF构建动态链接列表?

标签 winforms powershell dynamic-variables

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

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

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

然后,我有一个名为“mainform”的Windows窗体窗口,并在其中创建每个项目:
$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
}

关于winforms - 如何使用Powershell和WPF构建动态链接列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61440188/

相关文章:

c# - DataGridView 中的超链接

windows - 如何从 Powershell 调用 GetStdHandle、GetConsoleMode?

powershell - 组合链接的对象数组

powershell - 按文件移动广告组

python - 索引错误: list index out of range on python dynamic variable length

c++ - 运行时错误 : _block_type_is_valid(phead- nblockuse)

c# - 如何在没有 WPF 的情况下将 ProgressBar 嵌入到 ListView 中?

c# - 在 DataGridView 中将 IsNewRow 状态更改为 false 或模拟单元格上的击键

java - 在 Java 中为变量分配动态名称

c# - 摆脱 C# datagridview 行中的蓝色背景