Powershell:列表视图 - 图像
本文关键字:图像 视图 列表 Powershell | 更新日期: 2023-09-27 18:35:21
我正在努力在我的代码中寻找错误:
期望的行为:我将有带有随机参数的调用列表,例如:
- 呼叫: 图标("AAA")
- 呼叫: 图标("AAA")
- 呼叫: 图标("BBB")
- 呼叫: 图标("AAA")
- 呼叫: 图标("BBB")
- 呼叫: 图标("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 时,图标将更改。但它不仅更改了所需的所有图标。
知道问题可能在哪里吗?
问题已解决。
问题在于调用错误的列表项索引。现在一切都按预期显示。
$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
}}