2009-09-08 9 views
3

Je voudrais afficher une fenêtre d'état dans mon application C# Windows Forms qui informe l'utilisateur lorsque l'application est en attente d'acquérir un verrou. C'est une chose définie par l'application, cependant, la fenêtre devrait être visible et rester toujours au-dessus de toutes les autres fenêtres de mon application, même lorsque l'utilisateur clique sur une autre fenêtre (comme par exemple la plus grande fenêtre derrière). Il ne doit pas être modal (donc ShowDialog() ne peut pas être utilisé) parce que l'application doit continuer à essayer en arrière-plan et fermer automatiquement la fenêtre si le verrou pourrait finalement être acquis, et il ne devrait pas être le plus haut pour l'ensemble de la fenêtre (c'est-à-dire toutes les applications qui s'exécutent dans cette session de terminal).Comment conserver une fenêtre au-dessus de toutes les autres fenêtres de mon application uniquement?

Je connais la propriété Form.TopMost, mais elle ne peut qu'apporter et conserver une seule fenêtre au-dessus de toutes les autres, même celles provenant d'autres applications. Ce n'est clairement pas ce que je cherche.

Je sais que c'est possible, je l'ai déjà vu plusieurs fois dans d'autres applications. Je ne sais pas comment cela peut être fait.

+0

Non directement lié, mais si vous souhaitez lancer plusieurs classes de formulaire différentes en plus du parent principal et conserver le scénario d'ouverture d'origine, omettez la propriété owner. De cette façon, chaque fenêtre enfant ouverte par le parent restera ouverte sur le parent. Uniquement masqué lors de l'interaction avec la fenêtre parente, mais reste activé mais perd le focus lors de l'interaction avec d'autres fenêtres enfants ouvertes par le parent. L'utilisation incohérente de la propriété propriétaire entraîne un comportement étrange et erratique sur les fenêtres enfants. – IbrarMumtaz

Répondre

9

Si vous transmettez votre formulaire principal dans la méthode Show du formulaire d'état, il restera au-dessus du formulaire principal, mais pas au-dessus des autres applications. Ainsi, sous la forme principale, vous pouvez avoir du code comme ceci:

StatusForm statusForm = new StatusForm(); 
statusForm.Show(this); 

Cependant, cela ne signaler une seule fenêtre de votre application en tant que propriétaire.

+0

Il semble également fonctionner avec plusieurs fenêtres. (Au moins plusieurs instances de la même classe Form.) Elles restent toutes devant la fenêtre propriétaire. – ygoe

4

Vous devez définir la propriété Owner du formulaire enfant sur le formulaire parent et utiliser Show pour afficher le formulaire enfant.

+0

Merci, les deux solutions fonctionnent très bien. Malheureusement, je ne peux marquer qu'une réponse comme solution acceptée (mais les deux à la fois). J'ai également découvert qu'il est bon de définir la propriété ShowInTaskbar des fenêtres possédées sur false afin qu'elles ne gâchent pas la barre des tâches et la liste des fenêtres Alt + Tab. – ygoe

Questions connexes