#forms #powershell #user-interface
Вопрос:
в настоящее время я работаю над небольшим проектом графического интерфейса PowerShell.
У меня есть форма, в этой форме есть кнопка для вызова другой формы, которая предоставляет список с некоторыми элементами в нем. Пока все идет хорошо — я получаю результаты, как и ожидалось.
Теперь я отмечаю один из пунктов — нажимаю » ОК » — тогда он должен что-то сделать. И вот в чем моя проблема, она ничего не делает 😀 Ни ошибки, ни предупреждения, просто ничего. Если я протестирую с помощью узла записи «$($ListBox.SelectedItem)»-я получу выбранный элемент, как и ожидал. Но если вы хотите использовать его с get-adfsrelyingpartytrust-Name $ListBox.SelectedItem — ничего не произойдет. Если я выполняю функцию без остатка (так, чтобы появлялся только список), все работает так, как задумано O_o.
Код:
function single_rpt{ $RPTForm = New-Object System.Windows.Forms.Form $RPTForm.ClientSize = '400,200' $RPTForm.Text = "Choose" $RPTForm.BackColor = "#b2b2b2" $RPTForm.AutoSize = $false $RPTForm.StartPosition = 'CenterScreen' $RPTForm.ControlBox = $true $rptButton = New-Object System.Windows.Forms.Button $rptButton.BackColor = "#ffffff" $rptButton.Text = "OK" $rptButton.Width = 90 $rptButton.Height = 30 $rptButton.Location = New-Object System.Drawing.Point(20,125) $rptButton.Font = 'Microsoft Sans Serif,10' $rptButton.ForeColor = "#000000" $rptButton.UseVisualStyleBackColor = $true $rptButton.DialogResult = 1 # Test List Box $listBox = New-Object System.Windows.Forms.ListBox $listBox.Location = New-Object System.Drawing.Point(20,50) $listBox.Size = New-Object System.Drawing.Size(350,200) $listBox.Height = 80 $RPTForm.Controls.AddRange(@($listBox,$rptButton)) $listboxArray = @() $ADFS_RPTS = Get-AdfsRelyingPartyTrust Foreach($rpt in $ADFS_RPTS) { #$Object = Add-Member -TypeName NoteProperty -Name Service -Value $service.Name $listboxArray = $rpt.Name } $listBox.Items.AddRange($listboxArray) [void]$RPTForm.ShowDialog() if($RPTForm.DialogResult -eq "OK") { Get-AdfsReylingPartyTrus -Name $listBox.SelectedItem } } # Init PowerShell Gui Add-Type -AssemblyName System.Windows.Forms # Create Form with size, title and background color, etc. $TESTForm = New-Object System.Windows.Forms.Form $TESTForm.ClientSize = '250,300' $TESTForm.Text = "TEST" $TESTForm.BackColor = "#ffffff" $TESTForm.AutoSize = $false $TESTForm.StartPosition = 'CenterScreen' $TESTForm.ControlBox = $true $RPTSingle = New-Object System.Windows.Forms.Button $RPTSingle.BackColor = "#ffffff" $RPTSingle.Text = "RPTSingle" $RPTSingle.Width = 90 $RPTSingle.Height = 30 $RPTSingle.Location = New-Object System.Drawing.Point(75,125) $RPTSingle.Font = 'Microsoft Sans Serif,10' $RPTSingle.ForeColor = "#000000" $RPTSingle.UseVisualStyleBackColor = $true $RPTSingle.Add_Click({single_rpt}) # Add a Cancel Button $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.BackColor = "#ffffff" $CancelButton.Text = "Cancel" $CancelButton.Width = 90 $CancelButton.Height = 30 $CancelButton.Location = New-Object System.Drawing.Point(75,250) $CancelButton.Font = 'Microsoft Sans Serif,10' $CancelButton.ForeColor = "#000000" $CancelButton.UseVisualStyleBackColor = $true $CancelButton.DialogResult = 2 $TESTForm.Controls.AddRange(@($RPTSingle,$CancelButton)) # Display the form [void]$TESTForm.ShowDialog() #------------------------------------#
Комментарии:
1. Опечатка:
Get-AdfsReylingPartyTrus
отсутствует финалt
. Должно бытьGet-AdfsRelyingPartyTrust
2. Когда вы говорите «ничего не происходит», чего вы ожидаете ? Ваш код вызывает
Get-AdfsReylingPartyTrust
внутриsingle_rpt
, но ничего не делает с результатом. Он будет записан в выходной поток функции, но обработчик событий, настроенный пользователем$RPTSingle.Add_Click({single_rpt}
, просто проглотит его.3. Слава Маклейтону! Это было то, чего мне не хватало — я ожидал, что информация о командлете get -. отображается в текущем узле Powershell.