2011-01-12 2 views

Antwort

0

Ich kann nur auf einen Hack denken, um dies zu tun. Erstellen Sie ein neues Formular und legen Sie TopMost fest. Wenn Sie den Dialog angezeigt werden soll, rufen Sie davon:

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); 
} 
+1

Wenn Sie oben auf einem bestimmten Formular möchten, verwenden Sie 'ShowDialog (Formular)' http://msdn.microsoft.com/en-us/library/9a55b9ds.aspx – BrunoLM

+0

Ich habe bereits ShowDialog (IWin32Window) verwendet. :(Eigentlich verwende ich WPF-Fenster. Und ich habe ein Tab-Steuerelement in diesem Fenster. Alle Registerkarten haben ein Fenster, und jedes Fenster hat einen einzigen Prozess. So habe ich ein Problem :( – JDee

0

Ich löste Antwort der dieses ref Bruno :)

Mein Code ist das ...

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; 
} 
2
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); 
Verwandte Themen