2011-01-12 2 views

답변

0

나는 이것을 해킹 할 때만 생각할 수 있습니다. 새 양식을 만들어 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); 
} 
+1

특정 양식의 맨 위에 있으면 'ShowDialog (form)'을 사용하십시오. http://msdn.microsoft.com/en-us/library/9a55b9ds.aspx – BrunoLM

+0

이미 ShowDialog (IWin32Window)를 사용했습니다. :(사실 WPF 창을 사용하고 그 창에서 탭 컨트롤을 얻었습니다. 모든 탭에는 창이 있고 각 창에는 단일 프로세스가 있습니다. 그래서 문제가 있습니다. – JDee

0

나는이 심판 브루노의 대답 :

내 코드를 해결 이것은 ...

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