Как вернуть уровень ошибки, обрабатывая графический интерфейс с помощью PowerShell? - PullRequest
2 голосов
/ 24 июня 2019

У меня есть графический интерфейс, форма закроется автоматически через 10 секунд.Но если мы нажмем кнопку паузы, она также закроет форму.Я хочу вернуть уровень ошибки каждого процесса, который я делаю.Если форма закрывается автоматически, она возвращает уровень ошибки 10. Но если мы нажмем кнопку паузы, она вернет уровень ошибки 20. Любой может помочь, пожалуйста.

это мой код.

    function Timer_GUI {
    [System.Windows.Forms.Application]::EnableVisualStyles()
    $form1 = New-Object 'System.Windows.Forms.Form'
    $label1 = New-Object 'System.Windows.Forms.Label'
    $label2 = New-Object 'System.Windows.Forms.Label'
    $Cancel = New-Object 'System.Windows.Forms.Button'
    $timer1 = New-Object 'System.Windows.Forms.Timer'

    $form1_Load = { 
        $TotalTime = 10 #in seconds
            $script:StartTime = (Get-Date).AddSeconds($TotalTime)
            #Start the timer
            $timer1.Start()
    }
    $label1.Location = New-Object System.Drawing.Size(220,60)
    $label1.Size = New-Object System.Drawing.Size(500,30)

    $label2.Text = "The Process Will Continue in 10s"
    $label2.Location = New-Object System.Drawing.Size(140,30)
    $label2.Size = New-Object System.Drawing.Size(500,30)

    $form1.SuspendLayout()
    $form1.Controls.Add($label1)
    $form1.Controls.Add($label2)
    $form1.Controls.Add($Cancel)
    $form1.Width = 500
    $form1.Height = 200
    $form1.StartPosition = "CenterScreen"
    $form1.BackColor = "#e2e2e2"
    $form1.add_Load($form1_Load)

    $Cancel.DialogResult = 'Cancel'
    $Cancel.Location = New-Object System.Drawing.Size(350,100)
    $Cancel.Size = New-Object System.Drawing.Size(100,30)
    $Cancel.Text = "Pause"
    $Cancel.add_Click($Cancel_Click)
    $timer1.add_Tick($timer1_Tick)
    $form1.ResumeLayout()


    #Show the Form
    return $form1.ShowDialog()
    exit 100
}
#Call the form
Timer_GUI | Out-Null

1 Ответ

1 голос
/ 24 июня 2019

Не эксперт по графическому интерфейсу, но вот оно. Добавьте глобальную переменную $Global:formresult, установленную по умолчанию на 10, если кнопка нажата на 20.

Следующие 3 строки добавлены или обновлены,

Add-Type -AssemblyName System.Windows.Forms
$Global:formresult = 10
$Cancel.add_Click({ $Global:formresult = 20 })
$Global:formresult

enter image description here

Полный код, скопируйте и вставьте из своего.

Add-Type -AssemblyName System.Windows.Forms
function Timer_GUI {
    [System.Windows.Forms.Application]::EnableVisualStyles()
    $form1 = New-Object 'System.Windows.Forms.Form'
    $label1 = New-Object 'System.Windows.Forms.Label'
    $label2 = New-Object 'System.Windows.Forms.Label'
    $Cancel = New-Object 'System.Windows.Forms.Button'
    $timer1 = New-Object 'System.Windows.Forms.Timer'
    $Global:formresult = 10

    $form1_Load = { 
        $TotalTime = 10 #in seconds
            $script:StartTime = (Get-Date).AddSeconds($TotalTime)
            #Start the timer
            $timer1.Start()
    }
    $label1.Location = New-Object System.Drawing.Size(220,60)
    $label1.Size = New-Object System.Drawing.Size(500,30)

    $label2.Text = "The Process Will Continue in 10s"
    $label2.Location = New-Object System.Drawing.Size(140,30)
    $label2.Size = New-Object System.Drawing.Size(500,30)

    $form1.SuspendLayout()
    $form1.Controls.Add($label1)
    $form1.Controls.Add($label2)
    $form1.Controls.Add($Cancel)
    $form1.Width = 500
    $form1.Height = 200
    $form1.StartPosition = "CenterScreen"
    $form1.BackColor = "#e2e2e2"
    $form1.add_Load($form1_Load)

    $Cancel.DialogResult = 'Cancel'
    $Cancel.Location = New-Object System.Drawing.Size(350,100)
    $Cancel.Size = New-Object System.Drawing.Size(100,30)
    $Cancel.Text = "Pause"
    $Cancel.add_Click({ $Global:formresult = 20 })
    $timer1.add_Tick($timer1_Tick)
    $form1.ResumeLayout()


    #Show the Form
    return $form1.ShowDialog()
    exit 100
}
#Call the form
Timer_GUI | Out-Null

$Global:formresult
...