当我向上移动列表时,列表框中的工具提示文本未更新

问题描述 投票:0回答:1

我有一个 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()
powershell forms listbox tooltip
1个回答
0
投票

使用

$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")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.