BrowseForFolder-Dialog:居中并置于最顶层。

4

我有一个包含Winforms GuiBrowseForFolder-Dialog的界面。

是否有办法使这个对话框成为最顶层窗口或者在屏幕中居中显示

$getfolder = New-Object -com shell.application
$foldername = $getfolder.BrowseForFolder(0,"Text",16,"")
2个回答

2
如果你想使用 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)

谢谢,但这如何转换为PowerShell? - Moss
1
你的问题也有 C# 标签。无论如何,我也发布了 Powershell 代码 :) - Reza Aghaei
谢谢。有时我能够将C#翻译成PowerShell,但在这种情况下我无法做到。 但是,Forms-FolderBrowser与我上面使用的那个不完全相同。我需要能够A)在对话框内显示文本,并B)在其中放置输入框,以便可以手动输入路径。使用shell.application-folderbrowser,您可以通过BrowseInfo-flags进行配置。 - Moss
文本可以使用“Description”属性设置,但“TextBox”不能。 - Reza Aghaei

2
你需要指定所有者操作句柄。
$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
}

from http://poshcode.org/2002


第一个很好用。我需要COM变量,因为可能有选项标志。 能否将对话框居中显示在屏幕上或设置位置? - Moss
没有设置位置的方法。可能的解决方案是创建自定义对话框。 - t1meless

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接