классы PowerShell, графический интерфейс и события - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь этот код, который работает правильно:

$form = New-Object System.Windows.Forms.Form
$form.ClientSize  = '300,150'
$form.Text        = 'Form Test'
$form.TopMost     = $false

$Button1        = New-Object system.Windows.Forms.Button
$Button1.text   = "Close"
$Button1.width  = 60
$Button1.height = 30
$Button1.Font                    = 'Microsoft Sans Serif,10'
$Button1.add_Click({[System.Windows.Forms.MessageBox]::Show("Hello World." , "My Dialog Box")})

$form.Controls.AddRange(@($Button1))
$form.showDialog()

Я не понимаю, почему этот код не работает правильно (посмотрите на строку Buton1.add_Click).Диалоговое окно в Buton1.add_Click () запускается при запуске программы.

$form = New-Object System.Windows.Forms.Form
$form.ClientSize  = '300,150'
$form.Text        = 'Form Test'
$form.TopMost     = $false

$Button1        = New-Object system.Windows.Forms.Button
$Button1.text   = "Close"
$Button1.width  = 60
$Button1.height = 30
$Button1.Font                    = 'Microsoft Sans Serif,10'
$Button1.add_Click([System.Windows.Forms.MessageBox]::Show("Hello World." , "My Dialog Box"))

$form.Controls.AddRange(@($Button1))
$form.showDialog()

Цель состоит в том, чтобы создать класс для этой формы, например:

Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()

Class WindowView : System.Windows.Forms.Form {

    WindowView() {
        $this.ClientSize  = '300,150'
        $this.Text        = 'Test de Form'
        $this.TopMost     = $false

        $Button1                         = New-Object system.Windows.Forms.Button
        $Button1.text                    = "Close"
        $Button1.width                   = 60
        $Button1.height                  = 30
        $Button1.Font                    = 'Microsoft Sans Serif,10'
        $Button1.add_Click($this.monBoutonFunc_Click())

        $this.Controls.AddRange(@($Button1))
}

    [Void] monBoutonFunc_Click() {
        [System.Windows.Forms.MessageBox]::Show("Hello World." , "My Dialog Box")
        $this.monBoutonFunc_Click()
    }
}

$Form1 = [WindowView]::new()
$Form1.Add_Shown({$Form1.Activate()})
$Form1.showDialog()

Конечно, когда код в Button1.add_Click () выполняется в начале, форма закрывается «до», чтобы быть Show.

Каков синтаксис для правильной регистрации событий в объектно-ориентированном объекте powershell?

Большое спасибо за помощь и советы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...