问题描述
PowerScript Noob在这里。
我找到了一段代码,该代码段使用户可以通过“文件夹浏览器”对话框选择一个文件夹,而不必手动输入该文件夹的路径。
可以正常工作,除了“文件夹浏览器”对话框通常会在屏幕上其他窗口的后面打开,这很烦人。
代码如下:
Function Get-Folder($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")|Out-Null
$foldername = New-Object System.Windows.Forms.FolderbrowserDialog
$foldername.Description = "Select a folder"
$foldername.rootfolder = "MyComputer"
$foldername.Selectedpath = $initialDirectory
if($foldername.ShowDialog() -eq "OK")
{
$folder += $foldername.Selectedpath
}
return $folder
}
$FolderNavn = Get-Folder($startFolder)
如何获取“文件夹浏览器”对话框以在所有其他Windows的“顶部”打开?
谢谢。
解决方法
要设置BrowseForFolder对话框TopMost,您需要使用带有参数的ShowDialog()
重载方法,该参数指定对话框的所有者(父)窗体。
我认为最简单的方法是创建一个属性Topmost设置为$ true的新表单并将其用作所有者表单:
function Get-Folder {
[CmdletBinding()]
param (
[Parameter(Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0)]
[string]$Message = "Please select a directory.",[Parameter(Mandatory=$false,Position=1)]
[string]$InitialDirectory,[Parameter(Mandatory=$false)]
[System.Environment+SpecialFolder]$RootFolder = [System.Environment+SpecialFolder]::Desktop,[switch]$ShowNewFolderButton
)
Add-Type -AssemblyName System.Windows.Forms
$dialog = New-Object System.Windows.Forms.FolderBrowserDialog
$dialog.Description = $Message
$dialog.SelectedPath = $InitialDirectory
$dialog.RootFolder = $RootFolder
$dialog.ShowNewFolderButton = if ($ShowNewFolderButton) { $true } else { $false }
$selected = $null
# force the dialog TopMost
# Since the owning window will not be used after the dialog has been
# closed we can just create a new form on the fly within the method call
$result = $dialog.ShowDialog((New-Object System.Windows.Forms.Form -Property @{TopMost = $true }))
if ($result -eq [Windows.Forms.DialogResult]::OK){
$selected = $dialog.SelectedPath
}
# clear the FolderBrowserDialog from memory
$dialog.Dispose()
# return the selected folder
$selected
}