我想自动执行以下代码并使其动态化,因此当我点击按钮添加时,应创建一个$template(x)
并将其添加到$TemplateArray
}。
($menulist
是CheckedListBox
并显示文件名)
但
现在我有$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
答案 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