2016-05-31 152 views
0

基本上就是我想要做的是有它打開一個打開文件對話框窗口,可以讓我選擇一個文件,文件名保存到一個變量,這樣我可以在其他地方使用它瀏覽按鈕獲取從打開文件對話框的文件名。我有以下功能通過點擊瀏覽按鈕

Function Get-FileName($initialDirectory) { 
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null 
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
$OpenFileDialog.initialDirectory = $initialDirectory 
$OpenFileDialog.filter = "All files (*.*)| *.*" 
$OpenFileDialog.ShowDialog() | Out-Null 
$OpenFileDialog.FileName 
} #end function Get-FileName 

,當自身的運行將打開dialogwindow和輸出,我選擇到控制檯窗口中的文件。當我添加按鈕事件來彈出 - 打開對話窗口時,我使用$button1.add_Click({Get-FileName})單擊時會打開對話窗口,但我不確定如何將文件名(在對話窗口中選擇的文件)輸出到它自己的變量中。我覺得我很接近,但我只需要一個小小的方向,任何幫助將不勝感激。

+0

屬性'$ OpenFileDialog.FileName'將從輸出功能,因爲它沒有以其他方式被分配或任何地方捕獲。 '$ selectedPath = Get-FileName('C:\ WINDOWS')'不能按預期工作嗎?順便說一下,您可能想要將最後兩行更改爲'if($ OpenFileDialog.ShowDialog()-eq [System.Windows.Forms.DialogResult] :: OK){$ OpenFileDialog.FileName}'只是爲了處理該案例用戶取消對話框。 – BACON

+0

是的,'$ selectedPath = Get-FileName('C:\ WINDOWS')'不會在'$ button1.add_click({})'事件中按預期工作。 – themackyo

+0

我們可能需要使用按鈕查看錶單的代碼。另外,我還沒有從PowerShell做過很多Windows窗體編程,但我認爲你需要使用['Register-ObjectEvent' cmdlet](https://technet.microsoft.com/library/hh849929.aspx)進行註冊事件處理程序。類似於'Register-ObjectEvent -InputObject $ button1 -EventName'點擊'-Action {$ selectedPath = Get-FileName('C:\ WINDOWS')}',儘管我並不認爲'$ selectedPath'會在'ScriptBlock' ... – BACON

回答

1

您可以將其中的函數被調用的腳本塊中的變量?

$global:variable = $null 
$button1.add_Click({$global:variable = Get-FileName}) 
+0

我試過了,但變量沒有任何分配給它的東西。 – themackyo

+0

這聽起來像變量範圍問題。您的變量是否首先在按鈕單擊腳本塊之外聲明? – xXhRQ8sD2L7Z

+0

我更新了使用全球範圍 – xXhRQ8sD2L7Z

0

查看你的代碼後,它看起來像你只需要將filename屬性聲明爲一個變量。試試這個,文件名選擇將被存儲在$SelectedFile

Function Get-FileName($initialDirectory) 
{ 
    Add-Type -AssemblyName System.Windows.Forms 
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
    $OpenFileDialog.Title = "Please Select File" 
    $OpenFileDialog.InitialDirectory = $initialDirectory 
    $OpenFileDialog.filter = "All files (*.*)| *.*" 
    # Out-Null supresses the "OK" after selecting the file. 
    $OpenFileDialog.ShowDialog() | Out-Null 
    $Global:SelectedFile = $OpenFileDialog.FileName 
} 
+0

如果'$ SelectedFile'是一個全局變量,這也可以工作。 – xXhRQ8sD2L7Z