Powershell按钮仅适用于第二个“运行和调试”

nbnkbykc  于 2023-04-30  发布在  Shell
关注(0)|答案(1)|浏览(214)

我在PowerShell上有一个奇怪的bug,所以基本上每次我尝试运行我的脚本时,除了我的按钮外,所有东西都能正常工作。为了更好地理解我的脚本,我将在退出按钮上解释它。

Add-Type -assembly System.Windows.Forms

$main_form = New-Object System.Windows.Forms.Form
$main_form.FormBorderStyle = 0
$main_form.Text ='**'
$main_form.Width = 1080
$main_form.Height = 720
$main_form.BackColor = "#101010"
$main_form.AutoSize = $true

$btnClose = New-Object System.Windows.Forms.Button
$btnClose.Name = "Close"
$btnClose.Text = "X"
$btnClose.TextAlign = "MiddleCenter" 
$btnClose.Font = New-Object System.Drawing.Font("Segoe UI Semibold", 10, [System.Drawing.FontStyle]::Regular)
$btnClose.FlatStyle = [System.Windows.Forms.FlatStyle]::Flat
$btnClose.FlatAppearance.BorderSize = 0
$btnClose.BackColor = '#101010'
$btnClose.foreColor = '#FFFFFF'
$btnClose.Size = New-Object System.Drawing.Size(100,30)
$btnClose.Location = New-Object System.Drawing.Point(1020, 30)
$btnClose.Add_Click($btnClose_Close)
$main_form.Controls.Add($btnClose)

$btnClose_Close = {
  $main_form.Close()        
        }
$main_form.ShowDialog()

我想按钮的作用很简单,就是关闭窗体.更准确的解释是:如果我在Visual Studio Code或Windows PowerShell伊势中第一次启动代码,按钮一开始就不起作用,在我关闭它并再次运行它后,它神奇地起作用。问题是,如果脚本在没有任何IDE的情况下工作,那就好了,但是由于这个错误,当它作为“正常的PowerShell脚本”运行时,按钮将无法工作(在Windows上左键单击“使用PowerShell运行”)。
先谢谢你,为我糟糕的英语道歉。
我的猜测是这是IDE的问题(Visual Studio代码),但当我看到,它也不会在Windows PowerShell伊势上工作,我在互联网上搜索,但似乎没有人有这个问题。

au9on6nz

au9on6nz1#

问题是您试图在定义代码块之前将代码块分配给按钮单击事件。
只需将单击事件代码块移动到分配单击事件的位置上方即可。例如:

$btnClose_Close = {
  $main_form.Close()        
        }
$btnClose.Add_Click($btnClose_Close)
$main_form.Controls.Add($btnClose)

当然,你也可以像这样简单地添加代码:

$btnClose.Add_Click({$main_form.Close()})
$main_form.Controls.Add($btnClose)

如果您想知道为什么原始代码在从开发环境中执行时在第二次运行时仍然工作,下面是解释:当您的代码第一次执行时,它将空变量$btnClose_Close分配给按钮的click事件。之后,它设置所需的$btnClose_Close值。此时,按钮将无法在窗体上工作。然后,当您重新运行脚本时,变量$btnClose_Close仍然保留其上一次运行的值。因此,现在当您将该变量分配给click事件时,将添加脚本块。

相关问题