我有一个 powershell 脚本,我可以在其中查找一些文件并对其进行排序以填充多选列表框。我添加了一个函数和一个处理程序,以便每当我单击列表中的元素时显示带有“上次修改”日期的工具提示。但是,选择一个项目后,如果我在该项目上方的位置选择其他项目,则工具提示文本值将不会更新,而是显示该项目的上次修改日期。有人可以帮我理解为什么会发生这种情况吗?我以为这与排序有关,但不排序结果是一样的。我的代码应该始终采用最后选择的一个,不是吗?
#MAIN WINDOW
$form = New-Object System.Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(620,400)
$form.StartPosition = "CenterScreen"
$form.FormBorderStyle = "Sizable"
#SOURCE FILES FOLDER
$sourceFolder = "C:\Users\me\Downloads"
#FILE LISTBOX
$sourceListBox = New-Object System.Windows.Forms.ListBox
$sourceListBox.SelectionMode = "MultiSimple"
$sourceListBox.Size = New-Object System.Drawing.Size(250,310)
$sourceListBox.Location = New-Object System.Drawing.Point(20,30)
#SEARCH FOR FILES
$sourceFiles = Get-ChildItem -Path $sourceFolder -Filter "*.pdf" | Sort-Object LastWriteTime -Descending | Select-Object -ExpandProperty Name
$sourceListBox.Items.AddRange($sourceFiles)
$form.Controls.Add($sourceListBox)
#TOOLTIP
$toolTip = New-Object System.Windows.Forms.ToolTip
#UPDATE TOOLTIP FROM LAST SELECTED ITEM
function ShowLastModifiedDateTooltip {
$selectedItems = $sourceListBox.SelectedItems
if ($selectedItems.Count -gt 0) {
$lastSelectedItem = $selectedItems[$selectedItems.Count - 1]
$sourcePath = Join-Path $sourceFolder $lastSelectedItem
$lastModifiedDate = (Get-Item $sourcePath).LastWriteTime.ToString("dd-MM-yyyy")
$toolTip.SetToolTip($sourceListBox, "Modified: $lastModifiedDate")
}
}
#HANDLE CLICKS IN THE LISTBOX
$sourceListBox.Add_Click({
ShowLastModifiedDateTooltip
})
$form.ShowDialog()
使用
$sourceListBox.SelectedItems[$seectedItems.Count - 1]
作为最近选择的文件的名称,而不是 $sourceListBox.Text
。
一旦完成,我不确定是否需要测试
$selectedItems.Count
> 0。除非选择了某些内容,否则该代码永远不会被命中。
#UPDATE TOOLTIP FROM LAST SELECTED ITEM
function ShowLastModifiedDateTooltip {
$selectedItems = $sourceListBox.SelectedItems
if ($selectedItems.Count -gt 0) {
$lastSelectedItem = $sourceListBox.Text
$sourcePath = Join-Path $sourceFolder $lastSelectedItem
$lastModifiedDate = (Get-Item $sourcePath).LastWriteTime.ToString("dd-MM-yyyy")
$toolTip.SetToolTip($sourceListBox, "Modified: $lastModifiedDate")
}
}