2010-08-24 10 views
1

ShowDialog() ne met pas le formulaire en haut lorsque le propriétaire est réduit. Il est visible et visible, mais il n'est pas focalisé et derrière la fenêtre actuelle. Même en utilisant les lignes commentées, je vois le problème.ShowDialog() ne met pas le formulaire en haut lorsque le propriétaire est réduit

public void Form1_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Minimized; 
     // this.Hide(); 
     using (var f = new Form1()) 
     { 
      // this.WindowState = FormWindowState.Normal; 
      f.Text = "ShowDialog()"; 
      f.Click -= new EventHandler(f.Form1_Click); 
      f.ShowDialog(this); // f is not on top? 
      this.Show(); 
     } 
    } 

Répondre

1
this.WindowState = FormWindowState.Minimized; 

Dès que exécute, il n'y a pas de fenêtre gauche dans votre application qui peut encore recevoir le focus. Windows doit en trouver un autre pour se concentrer, ce sera une fenêtre d'une autre application. Un peu plus tard, votre boîte de dialogue apparaît, mais c'est trop tard, le focus est déjà perdu.

L'utilisation d'une astuce comme Control.BeginInvoke() pour minimiser le formulaire après la boîte de dialogue affichée ne fonctionne pas non plus, la boîte de dialogue se ferme automatiquement lorsque le parent est réduit. Le mieux que vous puissiez faire est de le cacher. Vous devrez utiliser la même astuce pour le restaurer avant la fermeture de la boîte de dialogue ou vous perdrez toujours le focus. Comme ceci:

protected override void OnClick(EventArgs e) { 
     using (var f = new Form1()) { 
      f.Text = "ShowDialog()"; 
      this.BeginInvoke(new Action(() => this.Hide())); 
      f.FormClosing += delegate { this.Show(); }; 
      f.ShowDialog(); 
     } 
    } 
+0

Merci pour la réponse; mais dans la version réelle de cela, la forme principale a été minimisée et cachée pour qui sait combien de temps avant que l'utilisateur essaie d'afficher le formulaire de dialogue avec un HotKey. De plus, le dialogue n'est pas fermé, il est simplement derrière la fenêtre supérieure. – CrashCodes