Powershell 无法根据值重命名按钮
如果变量等于1,则将按钮名称更改为重置;否则就把它改回原来的样子。然而,我无法使它正常工作 我尝试设置写入主机以显示变量值,并且显示正确。但是,一旦再次按下按钮,变量号将切换回原来的状态,从而导致按钮文本在按下按钮后不会改变。我还尝试删除该功能并直接在按钮代码中构建它。同样的结果Powershell 无法根据值重命名按钮,powershell,Powershell,如果变量等于1,则将按钮名称更改为重置;否则就把它改回原来的样子。然而,我无法使它正常工作 我尝试设置写入主机以显示变量值,并且显示正确。但是,一旦再次按下按钮,变量号将切换回原来的状态,从而导致按钮文本在按下按钮后不会改变。我还尝试删除该功能并直接在按钮代码中构建它。同样的结果 Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.Application]::EnableVisualStyles() $Form
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 = [int]1
Function AddNumber{
$MyNumber = [int]$MyNumber + [int]1
$BRename.text = "Reset"
}
Function SubNumber{
$MyNumber = [int]$MyNumber - [int]1
$BRename.text = "Rename"
}
Function GetNumber {
$MyNumber
}
$BRename.Add_Click({
if($MyNumber -eq [int]1){
AddNumber
}
If($MyNumber -eq [int]2){
SubNumber
}
})
[void]$Form.ShowDialog()
请参见代码中的注释:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
# Scriptblock for button pressed
$script:MyNumber = -1
$action = {
$script:MyNumber = -$script:MyNumber
if( $script:MyNumber -gt 0 ) {
$BRename.text = "Reset"
}
else {
$BRename.text = "Rename"
}
}
$form = New-Object system.Windows.Forms.Form
$form.Visible = $false
[void]$form.SuspendLayout()
$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'
$BRename.Add_Click( $action ) # event must asigned before showDialog!
$Form.controls.Add($BRename)
[void]$form.ResumeLayout()
$userInput = $form.ShowDialog()
请参见代码中的注释:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
# Scriptblock for button pressed
$script:MyNumber = -1
$action = {
$script:MyNumber = -$script:MyNumber
if( $script:MyNumber -gt 0 ) {
$BRename.text = "Reset"
}
else {
$BRename.text = "Rename"
}
}
$form = New-Object system.Windows.Forms.Form
$form.Visible = $false
[void]$form.SuspendLayout()
$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'
$BRename.Add_Click( $action ) # event must asigned before showDialog!
$Form.controls.Add($BRename)
[void]$form.ResumeLayout()
$userInput = $form.ShowDialog()
原因是范围可变。更改函数内的变量不会(默认情况下)更改其父范围内的变量。因此
Function SubNumber{
$MyNumber = [int]$MyNumber - [int]1
只会在子编号
函数中更改$MyNumber
,而不会更改原始编号。这非常类似于传递值示意图。其效果是,$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()
原因是范围可变。更改函数内的变量不会(默认情况下)更改其父范围内的变量。因此
Function SubNumber{
$MyNumber = [int]$MyNumber - [int]1
只会在子编号
函数中更改$MyNumber
,而不会更改原始编号。这非常类似于传递值示意图。其效果是,$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()
我不明白你想要什么。我相应地修改了剧本。我不明白你想要什么。我相应地修改了剧本。