Причина - переменная область.Изменение переменной внутри функции по умолчанию не меняет ее в родительской области видимости.Таким образом,
Function SubNumber{
$MyNumber = [int]$MyNumber - [int]1
изменит только $MyNumber
внутри функции SubNumber
, а исходная функция не изменится.Это довольно похоже на схему передачи по значению.В результате $MyNumber
никогда не равно 2, и, следовательно, функция вычитания никогда не вызывается.
В качестве примечания, явное [int]
не требуется и не типично для сценариев Powershell.
Чтобы изменить переменную в области видимости скрипта, используйте префикс $script:
внутри функции.Вот так
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$Form = New-Object system.Windows.Forms.Form
$Form.ClientSize = '273,155'
$Form.text = "Rename_Test"
$Form.TopMost = $false
$BRename = New-Object system.Windows.Forms.Button
$BRename.text = "Rename"
$BRename.width = 182
$BRename.height = 88
$BRename.location = New-Object System.Drawing.Point(39,26)
$BRename.Font = 'Microsoft Sans Serif,10'
$Form.controls.AddRange(@($BRename))
#Variables
$MyNumber = 1
function Renamed {
switch ($script:MyNumber) { # Switch is usually better than multiple if statements
1 { $BRename.text = "Reset"; ++$script:MyNumber }
2 { $BRename.text = "Rename"; --$script:MyNumber }
default {$script:MyNumber = 1} # For unexpected values, force inital value
}
}
$BRename.Add_Click({Renamed})
[void]$Form.ShowDialog()