MessageBox отображается только после закрытия формы - PullRequest
1 голос
/ 19 июня 2019

Создание простого графического интерфейса пользователя для запуска пользовательской функции с заданным именем пользователя в качестве аргумента.

После нажатия кнопки поиска мне нужно вернуть результат моей пользовательской функции пользователю. Желательно, не закрывая все это и не позволяя им искать снова, но я впервые строю графический интерфейс

import-module "{path to my custom module}"



#region Prereqs
[reflection.assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
#endregion

#region Create Window with textbox and button
$searchForm = New-Object System.Windows.Forms.Form
$unameTextBox = New-Object System.Windows.Forms.TextBox
$searchButton = New-Object System.Windows.Forms.Button


$unameTextBox.Location = '23,23'
$unameTextBox.Size = '150,23'
$unameTextBox.Text = 'Enter username...'

$searchButton.Text = 'Search'
$searchButton.Location = '196,23'


$searchForm.Controls.Add($unameTextBox)
$searchForm.Controls.Add($searchButton)
$searchForm.Text = 'Lit hold search'
$searchForm.ShowDialog()

#function takes 1 argument (uname), performs AD lookup and returns True/False
$status = (Get-MyCustomFunction $unameTextBox.Text)
$searchButton.Add_Click([System.Windows.Forms.Messagebox]::Show($status))

#endregion

Я ожидаю, что окно сообщения появится после нажатия кнопки поиска. Вместо этого он появляется только после того, как форма была закрыта. В идеале я хотел бы оставить форму открытой и разрешить дополнительные поиски. Может быть, есть вариант лучше, чем окно сообщения, для отображения простого сообщения?

Edit:

Я получаю следующую ошибку сейчас, если это обеспечивает дополнительный контекст ...

Cannot convert argument "value", with value: "OK", for "add_Click" to type "System.EventHandler": "Cannot convert value "OK" to type "System.EventHandler". Error: "Invalid cast from 
'System.Windows.Forms.DialogResult' to 'System.EventHandler'.""
At C:\Modules\lithold.ps1:33 char:1
+ $searchButton.Add_Click([System.Windows.Forms.Messagebox]::Show($stat ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

1 Ответ

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

Вы должны добавить свой обработчик для клика перед вызовом ShowDialog (в основном там, где вы установили эту кнопку), и он должен быть добавлен следующим образом:

$searchButton.Add_Click(
  {
    $status = (Get-MyCustomFunction $unameTextBox.Text)
    [System.Windows.Forms.Messagebox]::Show($status)
  }
)

Больше информации, например, здесь: https://social.technet.microsoft.com/wiki/contents/articles/25911.how-to-add-a-powershell-gui-event-handler-part-1.aspx

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