Arrays 创建新变量并将其添加到CheckedListBox

Arrays 创建新变量并将其添加到CheckedListBox,arrays,winforms,powershell,Arrays,Winforms,Powershell,我想自动化下面的代码并使其动态化,因此当我单击按钮添加时,它应该创建一个$template(x),并且应该将其添加到$TemplateArray中 ($menulist是一个选中列表框,它显示文件名) 但是 现在,我有$template1,$template2,如果我想要另一个,我必须手动在代码中键入它,但我希望通过添加按钮来完成 $template1 = Split-Path C:\Users\$Env:USERNAME\Documents\test.txt -Leaf -Resolve $t

我想自动化下面的代码并使其动态化,因此当我单击按钮添加时,它应该创建一个
$template(x)
,并且应该将其添加到
$TemplateArray

$menulist
是一个
选中列表框
,它显示文件名)

但是

现在,我有
$template1
$template2
,如果我想要另一个,我必须手动在代码中键入它,但我希望通过添加按钮来完成

$template1 = Split-Path C:\Users\$Env:USERNAME\Documents\test.txt -Leaf -Resolve
$template2 = Split-Path C:\Users\$Env:USERNAME\Documents\test2.txt -Leaf -Resolve
$TemplateArray = $template1,$template2;
$menulist.Items.AddRange($TemplateArray)



$button_add_OnClick = {
    #TODO: Place custom script here
}
另外,当我单击“添加”按钮后,是否可能会询问我文件位置,并将其格式化为类似的格式,因为我只想在
选中列表框中显示文件名,但我也希望能够使用另一个按钮打开文件(但“打开”按钮不是此问题的一部分)


要求用户从表单中选择文件非常简单-只需使用类:


您提到以后需要文件的完整路径,但您只对向用户显示文件名感兴趣

您可以通过向列表中添加适当的对象(与文件的Get-Item和Get-ChildItem返回的类型相同),而不仅仅是字符串来实现这一点:

$template1 = Get-Item C:\Users\$Env:USERNAME\Documents\test.txt
$template2 = Get-Item C:\Users\$Env:USERNAME\Documents\test2.txt
$TemplateArray = $template1,$template2

$AddButton.add_Click({
# ...
# Same as before
# ...

    if($OpenFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK)
    {
        $TargetFile = Get-Item $OpenFileDialog.FileName
        # Add the selected file to the CheckedListBox Items
        $menulist.Items.Add($TargetFile)

        # Add to the Templates array as well
        $TemplateArray += $TargetFile
    }
})
然后最后设置CheckedListBox的,以确保它显示文件名:

$menulist.DisplayMember = "Name"
因此,在GUI中,看起来您只有一个字符串列表,但当您检索
SelectedItems
时,它是一个成熟的
FileInfo
对象:

PS> $menulist.SelectedItems[0].FullName
C:\Users\CodeBusta\Documents\test.txt

要求用户从表单中选择文件非常简单-只需使用类:


您提到以后需要文件的完整路径,但您只对向用户显示文件名感兴趣

您可以通过向列表中添加适当的对象(与文件的Get-Item和Get-ChildItem返回的类型相同),而不仅仅是字符串来实现这一点:

$template1 = Get-Item C:\Users\$Env:USERNAME\Documents\test.txt
$template2 = Get-Item C:\Users\$Env:USERNAME\Documents\test2.txt
$TemplateArray = $template1,$template2

$AddButton.add_Click({
# ...
# Same as before
# ...

    if($OpenFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK)
    {
        $TargetFile = Get-Item $OpenFileDialog.FileName
        # Add the selected file to the CheckedListBox Items
        $menulist.Items.Add($TargetFile)

        # Add to the Templates array as well
        $TemplateArray += $TargetFile
    }
})
然后最后设置CheckedListBox的,以确保它显示文件名:

$menulist.DisplayMember = "Name"
因此,在GUI中,看起来您只有一个字符串列表,但当您检索
SelectedItems
时,它是一个成熟的
FileInfo
对象:

PS> $menulist.SelectedItems[0].FullName
C:\Users\CodeBusta\Documents\test.txt