Fenster öffnet sich im Hintergrund
-
Hallo,
ich stoße immer wieder auf das selbe Problem. Und zwar möchte ich ein neues Fenster öffnen. Nur leider öffnet sich dieses dann im Hintergrund, so dass man mit Alt+Tab hinspringen muss.
Dabei ist es jetzt egal, ob es sich dabei um eine MessageBox oder einen OpenFileDialog oder sonst was handelt, das Problem tritt immer wieder auf. Bei der MessageBox kann ich mir manchmal helfen wenn ich als erstes Argument "this" übergebe, oder als letztes "MessageBoxOptions.DefaultDesktopOnly" (oder so ähnlich).
Um das Problem zu isolieren habe ich mal eine neue Windows-Anwendung erstellt, wo wirklich überhaupt gar nichts drin ist. Also VS2005, Windows Anwendung erstellt, und dann in den Konstruktor, direkt unter InitializeComponent() 2 Zeilen Code eingefügt.
Also quasi
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); OpenFileDialog myOpenFileDialog = new OpenFileDialog(); myOpenFileDialog.ShowDialog(); } } }
Es öffnet sich nun (bevor das eigentliche Hauptfenster gezeichnet wird) ein OpenFileDialog. Wenn man diesen dann mit Ok oder Cancel wegdrückt, dann erscheint das eigentliche Hauptfenster, nur eben im Hintergrund.
Wenn ich direkt nach dem Aufruf der ShowDialog() Methode eine MessageBox.Show("Hallo") aufrufe, erscheint diese ebenfalls im Hintergrund.
Kann mir jemand sagen, wie ich erzwingen kann dass diese Fenster im Vordergrund geöffnet werden? Bzw. warum die Fenster nach dem Aufruf von ShowDialog() überhaupt im Hintergrund geöffnet werden?!
Vielen Dank schon mal im Voraus, ich sehe inzwischen so aus:
-
Schon mal http://msdn.microsoft.com/en-us/library/system.windows.forms.control.bringtofront(VS.80).aspx probiert?
-
Jo, BringToFront, Activate, Select habe ich bereits durch.
-
Ich kriegs nicht mehr ganz zusammen, aber das Problem liegt beim Focus.
Die erste Dialog bekommt den Focus, klar. Wenn dieser dann schließt gibt es kein aktives Fenster in der Applikation (das Hauptfenster ist ja noch nicht aktiv, bzw bist noch im ctor des Hauptfensters), also aktiviert Windows das zuletzt aktive Fenster, bzw setzt den Focus darauf. Dabei verliert dein aktueller Process komplett den Focus...
Nimm mal den Openfiledialog ganz aus dem ctor raus und versuch sowas ind er Art wie:
public partial class Form1: Form { public Form1() { InitializeComponent(); this.Shown += new EventHandler(Form1_Shown); } void Form1_Shown(object sender, EventArgs e) { OpenFileDialog myOpenFileDialog = new OpenFileDialog(); myOpenFileDialog.ShowDialog(); } }
-
Danke für die rasche Antwort. Mit dem EventHandler läufts
Werde morgen mal nachlesen was ich da jetzt eigentlich gemacht habe und dann ggf. nochmal nachfragen.
Eine weitere Frage hätte ich aber jetzt schon: Und zwar hast du ja jetzt gesagt, dass das am Fokus liegt, bzw. daran, dass das Hauptfenster noch gar nicht aktiv ist. Ich hatte ähnliche Probleme aber auch schon während dem "normalen" Programmablauf, also wenn das Hauptfenster eben schon geöffnet ist und ich z.B. mit einem Button-Click mehrere Dateien nacheinander öffnen / MessageBoxen ausgeben will (oder ähnliches). Gibt es da auch eine einfache Erklärung dafür? (klar, wahrscheinlich schwer da jetzt pauschal eine Aussage zu treffen, aber ich wollte halt mal gefragt haben)
Aber auf jeden Fall mal vielen Dank soweit, das hilft mir bestimmt weiter!