2008-12-09 7 views
25

Existe-t-il une méthode simple pour restaurer un formulaire réduit à son état antérieur, Normal ou Maximisé? J'attends la même fonctionnalité qu'en cliquant sur la barre des tâches (ou en cliquant avec le bouton droit de la souris et en choisissant la restauration). Jusqu'à présent, j'ai ceci, mais si le formulaire a été précédemment maximisé, il revient toujours comme une fenêtre normale.Restaurer WindowState à partir de minimisé

if (docView.WindowState == FormWindowState.Minimized) 
    docView.WindowState = FormWindowState.Normal; 

Dois-je gérer le changement d'état dans le formulaire pour me souvenir de l'état précédent?

Répondre

31

J'utilise la méthode d'extension suivante:

using System.Runtime.InteropServices; 

namespace System.Windows.Forms 
{ 
    public static class Extensions 
    { 
     [DllImport("user32.dll")] 
     private static extern int ShowWindow(IntPtr hWnd, uint Msg); 

     private const uint SW_RESTORE = 0x09; 

     public static void Restore(this Form form) 
     { 
      if (form.WindowState == FormWindowState.Minimized) 
      { 
       ShowWindow(form.Handle, SW_RESTORE); 
      } 
     } 
    } 
} 

appellent alors form.Restore() dans mon code.

+0

Est-ce que quelqu'un d'autre voit plusieurs icônes apparaissant dans la barre d'état système lorsque vous cliquez sur la flèche^(aka plus d'icônes)? Lorsque vous survolez les plus, ils disparaissent, il semble donc y avoir un problème d'actualisation. – MacGyver

4

Vous pouvez simuler le clic sur le bouton de la barre des tâches comme ceci:

SendMessage(docView.Handle, WM_SYSCOMMAND, SC_RESTORE, 0); 
3

Pour moi, le code ne fonctionne pas au-dessus. Mais j'ai enfin trouvé le code de travail. Le voici:

CxImports.ManagedWindowPlacement placement = new CxImports.ManagedWindowPlacement(); 
CxImports.GetWindowPlacement(Convert.ToUInt32(Handle.ToInt64()), placement); 

if (placement.flags == CxImports.WPF_RESTORETOMAXIMIZED) 
    WindowState = FormWindowState.Maximized; 
else 
    WindowState = FormWindowState.Normal; 

Je suppose que vous pouvez trouver toutes les fonctions «importées» nécessaires par simple googling.

11

La meilleure façon de restaurer une forme à l'état normal est:

if (MyForm.WindowState == FormWindowState.Minimized) 
{ 
    MyForm.WindowState = FormWindowState.Normal; 
} 
+0

Que faire si l'état de la fenêtre précédente n'était pas 'Normal' mais' Maximized'? –

+0

Vous pouvez utiliser le bouton Resotre Bas dans le coin supérieur des fenêtres –

-1

Le code ci-dessus n'a pas tout à fait le travail pour moi dans toutes les situations

Après avoir vérifié les drapeaux, je dois aussi vérifier showcmd = 3 et si oui, maximisez restaurez

Questions connexes