Windows窗体-单击按钮即可将数据添加到列表视图

时间:2019-08-25 19:48:57

标签: winforms powershell

我有一个winform应用程序,单击$button_UpdateTS后会填充一些数据,如何添加存储在变量中的数据,单击该按钮后即可使用该变量?

我在列表视图中想要的数据存储在名为$results的数组中

$button_UpdateTS = New-Object System.Windows.Forms.Button
$button_UpdateTS.Location = New-Object System.Drawing.Size(15, 954)
$button_UpdateTS.Size = New-Object System.Drawing.Size(320, 32)
$button_UpdateTS.TextAlign = "MiddleCenter"
$button_UpdateTS.Text = “Update Tasksequence”
$button_UpdateTS.Add_Click( { $Results = Set-DynamicVariables 
-Manufacturer "$($listview_Vendor.SelectedItems)" 
-TSPackageID "$($ListView_Tasksequences.SelectedItems.SubItems[1].Text)" -WhatIf })
    $Form.Controls.Add($button_UpdateTS)

哪个给我:

$Results = 
SKUNotExistsDriverName    : XPS Notebook 9560
SKUNotExistsDriverID      : PS10053F
SKUNotExistsDriverSKU     : 07BE
SKUNotExistsDriverVersion : A12
SKUNotExistsBIOSName      : XPS Notebook 9560
SKUNotExistsBIOSID        : PS10053E
SKUNotExistsBIOSSKU       : 07BE
SKUNotExistsBIOSVersion   : 1.15.0

这是我想要存储在的列表:

$Global:listview_NotExists_SKU = New-Object System.Windows.Forms.ListView
$listview_NotExists_SKU.Location = New-Object System.Drawing.Size(515, 670)
$listview_NotExists_SKU.Size = New-Object System.Drawing.Size(486, 235)
$listview_NotExists_SKU.View = "Details"
$listview_NotExists_SKU.FullRowSelect = $true
$listview_NotExists_SKU.MultiSelect = $true
$listview_NotExists_SKU.Sorting = "None"
$listview_NotExists_SKU.AllowColumnReorder = $true
$listview_NotExists_SKU.GridLines = $true
$listview_NotExists_SKU.Add_ColumnClick( { SortListView $this $_.Column })
$Form.Controls.Add($listview_NotExists_SKU)

我尝试使用此功能,但这不起作用:

Function Get-Results {
        ForEach ($Result in $Results) {
            $listview_NotExists_SKU.Items.Add($Result) 
       }
}

$Form.Add_Shown( { $Form.Load; Get-results })

1 个答案:

答案 0 :(得分:0)

因为添加了一个事件处理脚本块,例如.Add_Click()在调用方的范围内运行,在那里为变量$Results分配($Results = ...创建 scope-local 变量,设置事件处理程序的范围和随后调用的事件处理程序都无法看到。

要在 script 范围内创建变量,随后调用的事件处理程序也可以看到该变量 [1] ,请使用{{ 1}}范围说明符:

$script:

注意:如果设置事件处理程序的范围不是 script 范围(例如,如果代码在 function 内部),则需要要更一般地从事件处理程序中引用该范围,请使用$button_UpdateTS.Add_Click( { $script:Results = ... } ) ,它以各自的 parent 范围为目标。 [1]


[1]有关PowerShell中作用域的更多信息,请参见this answer的底部。