2016-12-30 10 views
2

Цель:создать кнопку сохранить в WinForms

Я пытаюсь создать кнопку, которая будет сохранять файл на рабочем столе. Входящий файл извлекается с помощью Invoke-WebRequest с использованием метода GET. Я хочу, чтобы кнопка сохранения была в моем всплывающем окне.

Вот пример:

Примечание стороны:

Этот код сидит в switch с переменным расколом три способами.

switch (...) { 
    p { 
    if ($second -match 'RegexMatch') { 
     $resource = $second 
     $fileResult = Invoke-WebRequest -Uri https://url.com/$resource/file -WebSession $currentsession 
     # End API Call 
     Write-Host 
     Write-Host '------------' -ForegroundColor Green 
     Write-Host 'FILE Results' -ForegroundColor Green 
     Write-Host '------------' -ForegroundColor Green 
     # Create Window 
     Add-Type -AssemblyName System.Windows.Forms 
     $form = New-Object -TypeName System.Windows.Forms.Form 
     $form.StartPosition = 'CenterScreen' 
     $form.KeyPreview = $true 
     $form.Add_KeyDown { 
     if ($_.Control -and $_.KeyCode -eq 'F') { 
      Add-Type -AssemblyName Microsoft.VisualBasic 
      $stringToFind = [Microsoft.VisualBasic.Interaction]::InputBox('Please enter your search terms', 'Find') 
      $pos = $textBox.Text.IndexOf($stringToFind) 

      if ($pos -ne -1) { 
      $textBox.SelectionStart = $pos 
      $textBox.SelectionLength = $stringToFind.Length 
      } 
     } 
     } 
     # Textbox 
     $textBox = New-Object -TypeName System.Windows.Forms.TextBox 
     $textBox.Dock = [Windows.Forms.DockStyle]::Fill 
     $textBox.ReadOnly =$true 
     $textBox.Multiline = $true 
     $textBox.ScrollBars = 'Vertical' 
     $textBox.Font = New-Object -TypeName System.Drawing.Font -ArgumentList ('Arial',12) 
     $textBox.ForeColor = 'White' 
     $textBox.Text = $fileResult 
     $textBox.BackColor = 'Black' 
     $textBox.ShortcutsEnabled = $true 
     $Form.Controls.Add($textBox) 
     # Button 
     $btn = New-Object -TypeName System.Windows.Forms.Button 
     $btn.Text = 'Finish' 
     $btn.DialogResult = 'Ok' 
     $btn.Dock = 'bottom' 
     $form.Controls.Add($btn) 
     if ($form.ShowDialog() -eq 'Ok') { 
     $tb.lines 
     } 
    } else { 
     Write-Host 
     Write-Warning -Message 'Please enter a valid FILE ID' 
     Write-Host 
    } 
    break 
    } 
    ... 
} 

Цель:

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

Вопрос:

Как бы я начать создавать кнопки с использованием WinForms в PowerShell, чтобы сохранить этот файл на диске?

Вот что я пробовал:

 $BtnSave=New-Object -TypeName System.Windows.Forms.Button 
     $BtnSave.Text='Save' 
     $BtnSave.Dock='bottom' 
     $btnSave.DialogResult='Ok' 
     $form.Controls.Add($BtnSave) 
     $BtnSave.Add_Click({ 
      $SaveFileDialog = New-Object 'System.Windows.Forms.SaveFileDialog' 
      if ($SaveFileDialog.ShowDialog() -eq 'Ok') 
      { 
      $textBox.Text = $SaveFileDialog.FileName 
      Write-Information 'File Saved' 
      } 
     }) 

Новая проблема:

Файл не сохраняется на диск до сих пор, но диалог сохранения файла показывает вверх по щелчку. Кроме того, использование Switch -OutFile с моим Invoke-WebRequest приводит к ошибке.

Ошибка:

Invoke-WebRequest : Missing an argument for parameter 'OutFile'. Specify a parameter of type 'System.String' and try again. 
+0

winforms in powershell? Можете ли вы рассказать об этом – GuidoG

+0

@GuidoG да разрешите мне изменить свое сообщение –

+0

@GuidoG «Я хочу, чтобы кнопка сохранения была в моем всплывающем окне». Изменено название. Я пытаюсь добавить кнопку в мое всплывающее окно, которое позволит мне сохранить файл на диск. –

ответ

2

После добавления кнопки, где вы хотите в форме, метод Add_Click() позволит обрабатывать его щелчок событие и запустить любую ScriptBlock вы хотите (когда кнопка нажата).

На этом этапе аргумент -OutFile для Invoke-WebRequest поможет с сохранением загруженного файла на диск (передайте ему желаемый путь к файлу).

Смежные вопросы