Ваша проблема в том, что обработчик событий выполняется в дочерней области действия script , а не в вашей функции, поэтому он не видит переменную $Temp
.Другими словами: нет замыкания, которое бы захватывало значение $Temp
и делало бы его доступным в обработчике событий.
Хотя в области действия скрипта можно задавать переменные с помощью спецификатора области действия $script:
,Обычно этого следует избегать, и в вашем случае вы бы не указали отдельные значения, характерные для каждого вызова DrawButton
.
. Лучше всего ставить желаемое значение для объекта кнопки в виде пользовательское свойство , используя Add-Member
:
function DrawButton {
$Temp = "$args"
$ButtonType = Get-Variable -Name "Button$Temp" -Value
# Add the value of $Temp as custom property .CustomProperty to the
# button object.
$ButtonType | Add-Member -NotePropertyMembers @{ CustomProperty = $Temp }
$ButtonType.Add_Click({
# $this refers to the button object; extract the custom property's value
$DefaultForm.Text = "Text$($this.CustomProperty)"
})
$DefaultGroupBox.Controls.Add($ButtonType)
$ButtonType.Cursor = $HandCursor
}