2011-01-12 4 views
1

Я хочу установить самый верхний мой SaveFileDialog. Но, как вы знаете, нет собственности. Есть ли другой способ установить TopMost в SaveFileDialog?Как установить верхнюю часть в SaveFileDialog с помощью C#?

+0

Я думаю, вы можете сделать вызывающую форму самой верхней. – leppie

+0

Почему ваш диалог уже не появляется вверх? –

ответ

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); 
Смежные вопросы