我有一个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 })
答案 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的底部。