Powershell:列表视图 - 图像

本文关键字:图像 视图 列表 Powershell | 更新日期: 2023-09-27 18:35:21

我正在努力在我的代码中寻找错误:

期望的行为:我将有带有随机参数的调用列表,例如:

  1. 呼叫: 图标("AAA")
  2. 呼叫: 图标("AAA")
  3. 呼叫: 图标("BBB")
  4. 呼叫: 图标("AAA")
  5. 呼叫: 图标("BBB")
  6. 呼叫: 图标("BBB")

根据调用的参数,图标应加载并显示在列表视图中。

实际行为:显示的图标取决于上次调用的参数。这是否意味着如果最后一个调用参数为 BBB,则为所有列表项显示图标 bbb.ico。如果上次调用参数为 AAA,则为所有列表项显示图标 aaa.ico。

法典:

函数图标($command){

if ($command -like '*AAA*'){
    $bitm=[System.Drawing.Image]::FromFile("c:'psn'aaa.ico") 
}

if ($command -like '*BBB*'){
    $bitm=[System.Drawing.Image]::FromFile("c:'psn'bbb.ico") 
}
    $imageListSmall = new-Object System.Windows.Forms.ImageList
    $imageListSmall.Images.Add($bitm)
    #ListView
    $objListView.SmallImageList = $imageListSmall;
    $objListView.Items.Add($command,0)
    $bitm.Dispose #doesn't have impact on solution

}

列表视图是在窗体中创建的...

{
  $objListView = New-Object System.Windows.Forms.ListView
  $objListView.View = [System.Windows.Forms.View]::Details
  $objListView.FullRowSelect = $true
  $LVcol1 = New-Object System.Windows.Forms.ColumnHeader
  $objListView.Columns.AddRange(
    [System.Windows.Forms.ColumnHeader[]](@($LVcol1))) 
  $LVcol1.Text = "Events"
  $LVcol1.Width = 165
  $objListView.Location = New-Object System.Drawing.Size(10,40) 
  $objListView.Size = New-Object System.Drawing.Size(260,120) 
  $objListView.Height = 120
  $objListView.Add_DoubleClick({Clicked;$objListView.Items.Remove($objListView.SelectedItems[0])})
  $objForm.Controls.Add($objListView) 
}

ListView 的更新是通过定期调用的计时器调用的,其中定期检查"更新"。当最后一项从 AAA 更改为 BBB 时,图标将更改。但它不仅更改了所需的所有图标。

知道问题可能在哪里吗?

Powershell:列表视图 - 图像

问题已解决。

问题在于调用错误的列表项索引。现在一切都按预期显示。

$global:imageListSmall = new-Object System.Windows.Forms.ImageList
$global:bitm2=[System.Drawing.Image]::FromFile("c:'psn'AAA.ico") 
$global:bitm=[System.Drawing.Image]::FromFile("c:'psn'BBB.ico")     
$global:imageListSmall.Images.Add("AAA",$bitm)
$global:imageListSmall.Images.Add("BBB",$bitm2)
function Icon($command){
if ($command -like '*AAA*'){
$objListBox.SmallImageList = $imageListSmall;
$objListBox.Items.Add($command,0) #for first image need index 0
}
if ($command -like '*BBB*'){
$objListBox.SmallImageList = $imageListSmall;
$objListBox.Items.Add($command,1) #for second image need index 1
}}