我有一个包含Winforms Gui
和BrowseForFolder-Dialog
的界面。
是否有办法使这个对话框成为最顶层窗口或者在屏幕中居中显示?
$getfolder = New-Object -com shell.application
$foldername = $getfolder.BrowseForFolder(0,"Text",16,"")
我有一个包含Winforms Gui
和BrowseForFolder-Dialog
的界面。
是否有办法使这个对话框成为最顶层窗口或者在屏幕中居中显示?
$getfolder = New-Object -com shell.application
$foldername = $getfolder.BrowseForFolder(0,"Text",16,"")
FolderBrowserDialog
,并将其显示在屏幕正中央和最顶部,只需将一个 TopMost
表单传递给它的 ShowDialog
方法即可。
C# 示例
var f = new FolderBrowserDialog();
f.ShowDialog(new Form() { TopMost = true});
this.Activate();
Powershell示例
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
$folder = New-Object System.Windows.Forms.FolderBrowserDialog
$form = New-Object System.Windows.Forms.Form -property @{TopMost = $True}
$folder.ShowDialog($form)
$handle = [System.Diagnostics.Process]::GetCurrentProcess().MainWindowHandle
$getfolder = New-Object -ComObject Shell.Application
$foldername = $getfolder.BrowseForFolder([int]$handle, "Text", 16, "")
但它是COM和.NET的混合体。我建议采用以下解决方案
$win32WindowDefinition = @"
using System;
using System.Windows.Forms;
public class Win32Window : IWin32Window
{
public Win32Window(IntPtr handle)
{
Handle = handle;
}
public IntPtr Handle { get; private set; }
}
"@
Add-Type -TypeDefinition $win32WindowDefinition -ReferencedAssemblies System.Windows.Forms.dll
$ownerHandle = New-Object Win32Window -ArgumentList ([System.Diagnostics.Process]::GetCurrentProcess().MainWindowHandle)
$folderBrowserDialog = New-Object System.Windows.Forms.FolderBrowserDialog
$dialogResult = $folderBrowserDialog.ShowDialog($ownerHandle)
if ($dialogResult -eq [System.Windows.Forms.DialogResult]::OK) {
$folderName = $folderBrowserDialog.SelectedPath
}
C#
标签。无论如何,我也发布了 Powershell 代码 :) - Reza Aghaei