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

时间:2016-01-27 13:35:58

标签: arrays winforms powershell

我想自动执行以下代码并使其动态化,因此当我点击按钮添加时,应创建一个$template(x)并将其添加到$TemplateArray }。

$menulistCheckedListBox并显示文件名)

现在我有$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
}

也是有可能在我点击添加之后它询问我的文件位置,并且将要格式化为这样,因为我只想在{{中显示文件名1}}但我也希望能够用另一个按钮打开文件(但打开按钮不是这个问题的一部分)

CheckedListBox

1 个答案:

答案 0 :(得分:0)

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

$AddButton.add_Click({
    # Create Dialog
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog

    # Configure its behavior to your liking
    $OpenFileDialog.InitialDirectory = $PWD
    $OpenFileDialog.Filter = "Text files (*.txt)|*.txt"

    # Launch it and wait for user to select file
    if($OpenFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK)
    {
        # Add the path of the selected file to the CheckedListBox Items
        $menulist.Items.Add($OpenFileDialog.FileName)

        # Add to the Templates array as well
        $TemplateArray += $OpenFileDialog.FileName
    }
})

您提到稍后需要该文件的完整路径,但您只想向用户显示该文件的名称。

您可以通过向列表添加适当的FileInfo对象(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的DisplayMember property以确保它显示文件的名称:

$menulist.DisplayMember = "Name"

所以在GUI中,看起来你只有一个字符串列表,但当你检索SelectedItems时,它是一个完整的FileInfo对象:

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