Выйти из скрипта, если я нажму кнопку выхода на форме? - PullRequest
0 голосов
/ 12 декабря 2018

Я запускаю функцию календаря выбора даты внутри цикла while ($ true).Так что работает постоянно.

Но я хочу убить его, если пользователь нажимает кнопку выхода на форме (не в диалоговом окне).Как я могу это сделать?

while($true){

[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
Function Pick-Date {
  $Cal = New-Object System.Windows.Forms.MonthCalendar
  $Cal.ShowWeekNumbers = $true
  $Cal.MaxSelectionCount = 1
  $Cal.Dock = 'Fill'
  $Form = New-Object Windows.Forms.Form
  $Form.text = "Colocar fecha que desea enviar. Y presiona Enter"
  $Form.Size = New-Object Drawing.Size @(656,620)
  $btnSelect = New-Object System.Windows.Forms.Button
  $btnSelect.Size = "100,100"
  $btnSelect.add_Click({ $Form.close() })
  $btnSelect.Location = New-Object System.Drawing.Point(530,480)
  $btnSelect.Text="ENTER"
  $Form.Controls.Add($btnSelect )
  $Form.AcceptButton = $btnSelect
  $Form.Controls.Add($Cal)
  $Form.Add_Shown({$Form.Activate()})
  [void]$Form.ShowDialog()
  return (Get-Date($Cal.SelectionStart))
}

$fecha = Pick-Date

}

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы можете проверить причину закрытия формы в событии FormClosing и установить переменную области сценария, чтобы предотвратить повторное открытие:

$Script:UserClosed = $false 
while($Script:UserClosed -ne $true){
[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
Function Pick-Date {
  $Cal = New-Object System.Windows.Forms.MonthCalendar
  $Cal.ShowWeekNumbers = $true
  $Cal.MaxSelectionCount = 1
  $Cal.Dock = 'Fill'
  $Form = New-Object Windows.Forms.Form
  $Form.text = "Colocar fecha que desea enviar. Y presiona Enter"
  $Form.Size = New-Object Drawing.Size @(656,620)
  $btnSelect = New-Object System.Windows.Forms.Button
  $btnSelect.Size = "100,100"
  $btnSelect.add_Click({ $Form.close() })
  $btnSelect.Location = New-Object System.Drawing.Point(530,480)
  $btnSelect.Text="ENTER"
  $Form.Controls.Add($btnSelect )
  $Form.AcceptButton = $btnSelect
  $Form.Controls.Add($Cal)
  $Form.Add_Shown({$Form.Activate()})
  $Form.Add_FormClosing({
    param( $sender,$e)
    If($e.CloseReason -eq 'UserClosing'){$Script:UserClosed = $true}
  })
  [void]$Form.ShowDialog()
  return (Get-Date($Cal.SelectionStart))
}
$fecha = Pick-Date
}
0 голосов
/ 12 декабря 2018

Вам не нужно

 while($true) {}

Просто напишите

[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
Function Pick-Date {
  $Cal = New-Object System.Windows.Forms.MonthCalendar
  $Cal.ShowWeekNumbers = $true
  $Cal.MaxSelectionCount = 1
  $Cal.Dock = 'Fill'
  $Form = New-Object Windows.Forms.Form
  $Form.text = "Colocar fecha que desea enviar. Y presiona Enter"
  $Form.Size = New-Object Drawing.Size @(656,620)
  $btnSelect = New-Object System.Windows.Forms.Button
  $btnSelect.Size = "100,100"
  $btnSelect.add_Click({ $Form.close() })
  $btnSelect.Location = New-Object System.Drawing.Point(530,480)
  $btnSelect.Text="ENTER"
  $Form.Controls.Add($btnSelect )
  $Form.AcceptButton = $btnSelect
  $Form.Controls.Add($Cal)
  $Form.Add_Shown({$Form.Activate()})
  [void]$Form.ShowDialog()
  return (Get-Date($Cal.SelectionStart))
}

$fecha = Pick-Date
write-host $fecha

Если вы не хотите, чтобы форма календаря открывалась даже тогда, когда пользователь нажал на кнопку ввода даты?Приведенная выше версия закрывается, когда пользователь нажимает кнопку выхода или когда пользователь вводит дату.

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