Выполнение вызова функции с помощью кнопки формы powershell - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь создать форму gui с помощью powershell, я хочу добавить кнопку

$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"
$Form.Controls.Add($Button)
$Button.Add_Click($Button_Click)

теперь я хочу создать функцию с именем button_click с несколькими командами, скажем: echo "Привет world ", поэтому я пишу это:

Function Button_Click(){
echo "Hello World"}

Но нажатие на кнопку не даст мне никакого результата, что я здесь делаю не так?

1 Ответ

0 голосов
/ 08 мая 2020

Вы использовали 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()

enter image description here

...