如何使用 C# 将 SaveFileDialog 设置为最顶层?

发布于 2024-10-11 13:42:25 字数 196 浏览 8 评论 0原文

我想将我的 SaveFileDialog 设置为最顶层。但如你所知,没有财产。 还有其他方法可以在 SaveFileDialog 中设置 TopMost 吗?

I want to set topmost my SaveFileDialog. But as you know there is no property.
Is there any other way to set TopMost at SaveFileDialog?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

假面具 2024-10-18 13:42:25
class ForegroundWindow : IWin32Window
{
    [DllImport("user32.dll")]
    public static extern IntPtr GetForegroundWindow();

    static ForegroundWindow obj = null;
    public static ForegroundWindow CurrentWindow { 
        get { 
           if (obj == null) 
                obj = new ForegroundWindow(); 
           return obj; 
        } 
    }
    public IntPtr Handle {
        get { return GetForegroundWindow(); }
    }
}

SaveFileDialog dlg=new SaveFileDialog();
dlg.ShowDialog(ForegroundWindow.CurrentWindow);
class ForegroundWindow : IWin32Window
{
    [DllImport("user32.dll")]
    public static extern IntPtr GetForegroundWindow();

    static ForegroundWindow obj = null;
    public static ForegroundWindow CurrentWindow { 
        get { 
           if (obj == null) 
                obj = new ForegroundWindow(); 
           return obj; 
        } 
    }
    public IntPtr Handle {
        get { return GetForegroundWindow(); }
    }
}

SaveFileDialog dlg=new SaveFileDialog();
dlg.ShowDialog(ForegroundWindow.CurrentWindow);
晨光如昨 2024-10-18 13:42:25

我只能考虑一个 hack 来做到这一点。新建一个表单并将其设置为 TopMost。当您想显示对话框时,请从中调用:

Form1.cs

private void Form1_Load(object sender, EventArgs ev)
{
    var f2 = new Form2() { TopMost = true, Visible = false };
    var sv = new SaveFileDialog();

    MouseDown += (s, e) =>
    {
        var result = f2.ShowSave(sv);
    };
}

Form2.cs

public DialogResult ShowSave(SaveFileDialog saveFileDialog)
{
    return saveFileDialog.ShowDialog(this);
}

I can only think on a hack to do this. Make a new Form and set it TopMost. When you want to show the dialog, call from it:

Form1.cs

private void Form1_Load(object sender, EventArgs ev)
{
    var f2 = new Form2() { TopMost = true, Visible = false };
    var sv = new SaveFileDialog();

    MouseDown += (s, e) =>
    {
        var result = f2.ShowSave(sv);
    };
}

Form2.cs

public DialogResult ShowSave(SaveFileDialog saveFileDialog)
{
    return saveFileDialog.ShowDialog(this);
}
花海 2024-10-18 13:42:25

我解决了这个参考布鲁诺的答案:)

我的代码是这样的......

public System.Windows.Forms.DialogResult ShowSave(System.Windows.Forms.SaveFileDialog saveFileDialog)
{
    System.Windows.Forms.DialogResult result = new System.Windows.Forms.DialogResult();

    Window win = new Window();
    win.ResizeMode = System.Windows.ResizeMode.NoResize;
    win.WindowStyle = System.Windows.WindowStyle.None;
    win.Topmost = true;
    win.Visibility = System.Windows.Visibility.Hidden;
    win.Owner = this.shell;

    win.Content = saveFileDialog;
    win.Loaded += (s, e) =>
    {
        result = saveFileDialog.ShowDialog();
    };
    win.ShowDialog();

    return result;
}

I solved this ref Bruno's answer :)

My code is this...

public System.Windows.Forms.DialogResult ShowSave(System.Windows.Forms.SaveFileDialog saveFileDialog)
{
    System.Windows.Forms.DialogResult result = new System.Windows.Forms.DialogResult();

    Window win = new Window();
    win.ResizeMode = System.Windows.ResizeMode.NoResize;
    win.WindowStyle = System.Windows.WindowStyle.None;
    win.Topmost = true;
    win.Visibility = System.Windows.Visibility.Hidden;
    win.Owner = this.shell;

    win.Content = saveFileDialog;
    win.Loaded += (s, e) =>
    {
        result = saveFileDialog.ShowDialog();
    };
    win.ShowDialog();

    return result;
}
挽你眉间 2024-10-18 13:42:25

作为任何类型的 FileDialog 的更通用的 WPF-ish:

public static class ModalFileDialog
{
    /// <summary>
    /// Open this file dialog on top of all other windows
    /// </summary>
    /// <param name="fileDialog"></param>
    /// <returns></returns>
    public static bool? Show(Microsoft.Win32.FileDialog fileDialog)
    {
        Window win = new Window();
        win.ResizeMode = System.Windows.ResizeMode.NoResize;
        win.WindowStyle = System.Windows.WindowStyle.None;
        win.Topmost = true;
        win.Visibility = System.Windows.Visibility.Hidden;
        win.Content = fileDialog;

        bool? result = false;
        win.Loaded += (s, e) =>
        {
            result = fileDialog.ShowDialog();
        };
        win.ShowDialog();
        return result;
    }
} 

As a more generic WPF-ish for any type of FileDialog:

public static class ModalFileDialog
{
    /// <summary>
    /// Open this file dialog on top of all other windows
    /// </summary>
    /// <param name="fileDialog"></param>
    /// <returns></returns>
    public static bool? Show(Microsoft.Win32.FileDialog fileDialog)
    {
        Window win = new Window();
        win.ResizeMode = System.Windows.ResizeMode.NoResize;
        win.WindowStyle = System.Windows.WindowStyle.None;
        win.Topmost = true;
        win.Visibility = System.Windows.Visibility.Hidden;
        win.Content = fileDialog;

        bool? result = false;
        win.Loaded += (s, e) =>
        {
            result = fileDialog.ShowDialog();
        };
        win.ShowDialog();
        return result;
    }
} 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文