如何使用C#在SaveFileDialog中设置最顶层?

如何使用C#在SaveFileDialog中设置最顶层?

问题描述:

我想设置最上方的我的SaveFileDialog。但是,如你所知,没有财产。 有没有其他方法可以在SaveFileDialog上设置TopMost?如何使用C#在SaveFileDialog中设置最顶层?

+0

我想你可以使调用窗体最顶层。 – leppie 2011-01-12 08:24:06

+0

为什么你的对话框不能弹出到顶部? – 2011-01-12 08:46:03

我只能在黑客身上想到做到这一点。制作一个新表格并将其设置为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); 
} 

我解决了这个裁判布鲁诺的答案:)

我的代码这是...

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; 
} 

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);