Henry Wollman
Henry Wollman

Reputation: 45

How to bring the main form back to the front after the file open dialog is closed

My C# application starts by opening a form. In the constructor for that form I "showDialog" an openfiledialog. After selecting a file to open, the openfile dialog closes, the file is loaded and the contents displayed in the main form but the main form is buried behind every other open window on my desktop.

I have to find it in the task bar and bring it to focus. I just started the application, I want the form to have focus.

I have written other applications that do not use the openfiledialog and when I start them the main form opens with focus as you would expect.

How do I make the main form get focus after the openfiledialog closes?

I have tried

None of them make any apparent difference at all.

I have research this problem extensively and this are the things everyone suggests and say work, but they don't work for me. Some have insinuated that I am violating all that is holy by trying to make my form topmost. However, I don't think very many people would like to open an application and have the main form for it show up behind everything else.

Any one have any other ideas about how to make sure my form is "in front", topmost, has focus?

Upvotes: 3

Views: 4353

Answers (4)

SqlACID
SqlACID

Reputation: 4014

If you can, move the ShowDialog out of the constructor, or try putting this in the constructor:

this.Shown += OnShown;

and move your ShowDialog to here:

private void OnShown(object sender, EventArgs eventArgs)
{
    var result = new OpenFileDialog().ShowDialog();        
}

Upvotes: 0

John
John

Reputation: 1021

SOLUTION: this.Activate(); works but if called from the form Load event.

Upvotes: 1

terrybozzio
terrybozzio

Reputation: 4542

This will set the window on top:

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);

private void Form1_Load(object sender, EventArgs e)
{
    ....

    //after your code place the call to the function at the end.       
    SetForegroundWindow(this.Handle);
}

Althought as Mr. hans said and very well you are better off with another design.

Upvotes: 0

Hans Passant
Hans Passant

Reputation: 941217

When you do it this way, your application will have a brief moment where no window is available to receive the focus after the dialog closes. Windows is forced to find another window to give the focus to, that will be a window of another app. Your main window eventually appears, now behind that other's app window.

Display the dialog in an event handler of the Shown event instead. Or use the boilerplate File + Open command.

Upvotes: 1

Related Questions