Путь к кнопке «Обзор» в качестве переменной для использования в других местах - PullRequest
0 голосов
/ 06 июня 2018

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

Некоторые предыстории: я пишу приложение, которое в основном конвертирует PDF-файлы в .txt.

Моя цель состоит в том, чтобы пользователь мог выбрать PDF-файл с диалоговым окном открытия файла после нажатия кнопки «Обзор».После того, как они захватили pdf, я хочу, чтобы кнопка OK приняла путь в качестве переменной и, вуаля, преобразовала выбранный PDF в файл .txt.Другими словами, я не хочу, чтобы они сами вступали на путь;Я хочу, чтобы кнопка обзора выводила диалоговое окно открытия файла, и после этого имела возможность использовать выбранный путь в качестве переменной.

Вот полный код:

[void][System.Reflection.Assembly]::Load('System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
[void][System.Reflection.Assembly]::Load('System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')
$MainForm = New-Object -TypeName System.Windows.Forms.Form
[System.Windows.Forms.Button]$okButton = $null
[System.Windows.Forms.Button]$cancelButton = $null
[System.Windows.Forms.PictureBox]$pictureBox1 = $null
[System.Windows.Forms.Label]$Label = $null
[System.Windows.Forms.OpenFileDialog]$openFileDialog1 = $null
[System.Windows.Forms.Button]$BrowseButton = $null
[System.Windows.Forms.Button]$button1 = $null
function InitializeComponent
{
$resources = Invoke-Expression (Get-Content "C:\Users\eakinsa\Desktop\Style Guide Report\Includes\Form1.resources.psd1" -Raw)
$okButton = (New-Object -TypeName System.Windows.Forms.Button)
$cancelButton = (New-Object -TypeName System.Windows.Forms.Button)
$pictureBox1 = (New-Object -TypeName System.Windows.Forms.PictureBox)
$Label = (New-Object -TypeName System.Windows.Forms.Label)
$openFileDialog1 = (New-Object -TypeName System.Windows.Forms.OpenFileDialog)
$BrowseButton = (New-Object -TypeName System.Windows.Forms.Button)
([System.ComponentModel.ISupportInitialize]$pictureBox1).BeginInit()
$MainForm.SuspendLayout()

#
#BrowseDialog Button
#


$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{
    Multiselect = $false # Multiple files can be chosen
    Filter = 'PDFs (*.pdf)|*.pdf' # Specified file types
}


$BrowseButton.FlatStyle = [System.Windows.Forms.FlatStyle]::Popup
$BrowseButton.Location = (New-Object -TypeName System.Drawing.Point -ArgumentList @([System.Int32]16,[System.Int32]212))
$BrowseButton.Name = [System.String]'BrowseButton'
$BrowseButton.Size = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]75,[System.Int32]23))
$BrowseButton.TabIndex = [System.Int32]1
$BrowseButton.Text = [System.String]'Browse'
$BrowseButton.UseVisualStyleBackColor = $true
$BrowseButton.Add_Click({$Dialog = $FileBrowser.ShowDialog(); if($Dialog -eq 'OK') {return $FileBrowser.SelectedPath}}) 



#
#cancelButton-Cancel
#
$cancelButton.ForeColor = [System.Drawing.Color]::Crimson
$cancelButton.Location = (New-Object -TypeName System.Drawing.Point -ArgumentList @([System.Int32]545,[System.Int32]439))
$cancelButton.Name = [System.String]'cancelButton'
$cancelButton.Size = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]75,[System.Int32]23))
$cancelButton.TabIndex = [System.Int32]2
$cancelButton.Text = [System.String]'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$cancelButton.UseVisualStyleBackColor = $true

#
#okButton-Okay
#
$okButton.ForeColor = [System.Drawing.Color]::ForestGreen
$okButton.Location = (New-Object -TypeName System.Drawing.Point -ArgumentList @([System.Int32]626,[System.Int32]440))
$okButton.Name = [System.String]'okButton'
$okButton.Size = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]75,[System.Int32]23))
$okButton.TabIndex = [System.Int32]3
$okButton.Text = [System.String]'OK'
$okButton.Add_Click({echo $File })
$okButton.UseVisualStyleBackColor = $true

#
#pictureBox1
#

$pictureBox1.Image = ([System.Drawing.Image]$resources.'pictureBox1.Image')
$pictureBox1.Location = (New-Object -TypeName System.Drawing.Point -ArgumentList @([System.Int32]12,[System.Int32]12))
$pictureBox1.Name = [System.String]'pictureBox1'
$pictureBox1.Size = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]689,[System.Int32]165))
$pictureBox1.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::Zoom
$pictureBox1.TabIndex = [System.Int32]2
$pictureBox1.TabStop = $false
$pictureBox1.add_Click($pictureBox1_Click)
#
#Label
#
$Label.AutoSize = $true
$Label.ForeColor = [System.Drawing.Color]::Black
$Label.Location = (New-Object -TypeName System.Drawing.Point -ArgumentList @([System.Int32]13,[System.Int32]184))
$Label.Name = [System.String]'Label'
$Label.Size = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]570,[System.Int32]13))
$Label.TabIndex = [System.Int32]3
$Label.Text = [System.String]'Use this tool to get a custom report that flags potential style errors in a PDF based on the Elsevier style guide.'
#

#MainForm
#
$MainForm.ClientSize = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]713,[System.Int32]475))
$MainForm.Controls.Add($BrowseButton)
$MainForm.Controls.Add($Label)
$MainForm.Controls.Add($pictureBox1)
$MainForm.Controls.Add($cancelButton)
$MainForm.Controls.Add($okButton)
$MainForm.Font = (New-Object -TypeName System.Drawing.Font -ArgumentList @([System.String]'Segoe UI',[System.Single]8.25,[System.Drawing.FontStyle]::Regular,[System.Drawing.GraphicsUnit]::Point,([System.Byte][System.Byte]0)))
$MainForm.ForeColor = [System.Drawing.Color]::ForestGreen
$MainForm.Name = [System.String]'MainForm'
$MainForm.Text = [System.String]'PDF Style Reporting Tool'
([System.ComponentModel.ISupportInitialize]$pictureBox1).EndInit()
$MainForm.ResumeLayout($false)
$MainForm.PerformLayout()
$MainForm.ShowDialog()
Add-Member -InputObject $MainForm -Name base -Value $base -MemberType NoteProperty
Add-Member -InputObject $MainForm -Name okButton -Value $okButton -MemberType NoteProperty
Add-Member -InputObject $MainForm -Name pictureBox1 -Value $pictureBox1 -MemberType NoteProperty
Add-Member -InputObject $MainForm -Name Label -Value $Label -MemberType NoteProperty
Add-Member -InputObject $MainForm -Name openFileDialog1 -Value $openFileDialog1 -MemberType NoteProperty
Add-Member -InputObject $MainForm -Name BrowseButton -Value $BrowseButton -MemberType NoteProperty
Add-Member -InputObject $MainForm -Name button1 -Value $button1 -MemberType NoteProperty
}
. InitializeComponent

Код, который необходимо изменить, включает в себя переменную $ FileBrowser, переменную $ BrowseButton и переменную $ OkButton:

$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{
    Multiselect = $false # Multiple files can be chosen
    Filter = 'PDFs (*.pdf)|*.pdf' # Specified file types
}

$BrowseButton.FlatStyle = [System.Windows.Forms.FlatStyle]::Popup
$BrowseButton.Location = (New-Object -TypeName System.Drawing.Point -ArgumentList @([System.Int32]16,[System.Int32]212))
$BrowseButton.Name = [System.String]'BrowseButton'
$BrowseButton.Size = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]75,[System.Int32]23))
$BrowseButton.TabIndex = [System.Int32]1
$BrowseButton.Text = [System.String]'Browse'
$BrowseButton.UseVisualStyleBackColor = $true
$BrowseButton.Add_Click({$Dialog = $FileBrowser.ShowDialog(); if($Dialog -eq 'OK') {return $FileBrowser.SelectedPath}}) 

$okButton.ForeColor = [System.Drawing.Color]::ForestGreen
$okButton.Location = (New-Object -TypeName System.Drawing.Point -ArgumentList @([System.Int32]626,[System.Int32]440))
$okButton.Name = [System.String]'okButton'
$okButton.Size = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]75,[System.Int32]23))
$okButton.TabIndex = [System.Int32]3
$okButton.Text = [System.String]'OK'
$okButton.Add_Click({echo $File })
$okButton.UseVisualStyleBackColor = $true

Пока что я согласен с тем, что я могу отображать путь, используя событие Add_Click с кнопкой Ok или что-то подобное.Как я могу: 1) сохранить выбранный файл в переменной, используя кнопку обзора (желательно событие добавления клика), 2) передать эту переменную (должна ли она быть глобальной, чтобы работать?) В функцию Add_Click для кнопки ОК

1 Ответ

0 голосов
/ 15 июня 2018

Получил ответ на этот вопрос на отдельном форуме.

$BrowseButton.FlatStyle = [System.Windows.Forms.FlatStyle]::Popup
$BrowseButton.Location = (New-Object -TypeName System.Drawing.Point -ArgumentList @([System.Int32]16,[System.Int32]212))
$BrowseButton.Name = [System.String]'BrowseButton'
$BrowseButton.Size = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]75,[System.Int32]23))
$BrowseButton.TabIndex = [System.Int32]1
$BrowseButton.Text = [System.String]'Browse'
$BrowseButton.UseVisualStyleBackColor = $true
$BrowseButton.Add_Click({
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog 
$FileBrowser.Filter = 'PDFs (*.pdf)|*.pdf' 
if($FileBrowser.ShowDialog() -eq "Ok"){
    $Script:filename = 'Not found'
    $Script:filename = $TextBox.Text = $FileBrowser.Filename
}})

$TextBox.Location = (New-Object -TypeName System.Drawing.Point -ArgumentList @([System.Int32]100,[System.Int32]212))
$TextBox.Name = [System.String]'Path'
$TextBox.Size = (New-Object -TypeName System.Drawing.Size -ArgumentList @([System.Int32]75,[System.Int32]300))

Если я правильно понимаю этот код, моя проблема была парой вещей.Одной из проблем было определение объема.Тот факт, что объект создается в функции add click и добавляется модификатор области $ script, решает эту проблему и позволяет использовать эту функцию в другом месте скрипта.Второй говорит сценарию, что делать, когда в браузере файлов нажата кнопка «ОК» (или открыт).Это обрабатывается условным оператором.

Наконец-то произошла ошибка с тем, как я обработал запуск приложения pdftotext.Мне не нужно было запускать его как событие add_click.Я просто добавил его в конец моего скрипта, и он действительно принимает переменную в качестве аргумента.

.\Includes\Bin32\pdftotext $filename

В конечном итоге это работает для моих целей.

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