Вы использовали Write-Output, который будет записывать в конвейер и в этом случае не будет отображаться, потому что ваша консоль PowerShell заблокирована, пока активен $form.ShowDialog()
.
Однако вы все еще можете это сделать! Write-host
- еще один командлет для возврата вывода, который может напрямую писать в окно хоста PowerShell в реальном времени. Это один из тех редких случаев, когда вы, вероятно, действительно хотите использовать Write-Host
.
Затем нужно внести некоторые небольшие изменения. Как правило, поведение обработчика событий следует определять перед добавлением $button
к $Form
.
Вы создали функцию с именем Button_click
, но добавляете обработчик событий, как будто это переменная. Вот как это сделать вместо этого, создав переменную, которая содержит {scriptblock}
:
$button_click = {write-host "hi Sahar"}
И после этого ваш код должен выглядеть так, и он будет работать, как ожидалось
$form = New-Object System.Windows.Forms.Form
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(35,35)
$Button.Size = New-Object System.Drawing.Size(120,23)
$Button.Text = "Show Dialog Box"
$Button.Add_Click($Button_Click)
$Form.Controls.Add($Button)
$form.showdialog()