2017-02-22 4 views
0

J'ai une application .Net winforms (C#) avec sa forme principale (forme A), et elle ouvre différentes autres formes comme non-modale (de sorte que l'utilisateur peut travailler sur le formulaire principal ou formes enfants indépendamment)Fenêtre d'un autre processus entre mes deux formes

Dans certains cas, la forme enfant (formulaire B) ouvre une autre forme contextuelle (forme C). Lorsque cette fenêtre est fermée, une autre fenêtre d'une autre application (par exemple, chrome, outlook, VS) se trouve entre mon formulaire principal et le formulaire enfant. Habituellement, cette autre fenêtre est celle qui se trouvait juste en dessous de ma fenêtre principale.

Avant la fermeture de la forme, l'ordre z est: Outlook, Forme A, Forme B, Forme C

Après forme de fermeture C, les modifications z afin de: Formule A, Outlook, forme B

Je ne voulais pas spécifiquement BringToFront() mon formulaire A, car il pourrait y avoir plusieurs instances de formulaire B à un moment donné, et je ne veux pas faire mon formulaire A sur le formulaire B.

Une idée de ce qui pourrait causer ce genre de comportement? Y at-il un moyen de s'assurer que tous les formulaires de ma demande sont au-dessus des autres fenêtres?

Répondre

1

Vous pouvez créer les formulaires enfants appartenant au formulaire qui les ouvre. Cela maintiendra un ordre z relatif.

public partial class FormA : Form 
    { 

    private void button1_Click(object sender, EventArgs e) 
     { 
     FormB f = new FormB(); 
     f.Show(this); 
     } 
    } 

public partial class FormB : Form 
    { 

    private void button1_Click(object sender, EventArgs e) 
     { 
     FormC f = new FormC(); 
     f.Show(this.Owner); 
     } 
    } 

Cela a pour effet secondaire que lorsque le propriétaire d'un formulaire est fermé/réduite au minimum, ses formes appartenant également fermer/minimiser.

+0

Et aussi cela a l'effet secondaire de, si j'ouvre une autre instance de la forme B, je ne peux pas accéder à l'instance de formulaire B précédente. J'ai besoin d'avoir accès à tous les formulaires à tout moment :( – Anuruddha

+0

@Anuruddha, rien dans cette page ne vous empêche d'accéder aux instances précédentes.Le seul inconvénient est que la fenêtre propriétaire (FormA dans ce cas) ne peut pas couvrir une fenêtre propriétaire Un bon résumé de la relation Windows propriétaire-propriétaire est présenté [ici] (https://msdn.microsoft.com/en-us/library/system.windows.window.owner%28v=vs.110%29.aspx ? f = 255 & MSPPError = -2147217396 # Remarques); its pour la fenêtre WPF, mais la liste est également applicable aux fenêtres WinForm. – TnTinMn