none
Dialogue de premier plan RRS feed

  • Question

  • Bonjour,

    J'ai développé une appli WinForm en VB.Net qui cible le Framework 4.0 Client.

    Cette appli comporte plusieurs fenêtres dont, dans un certain état, deux d'entre elles restent impérativement au premier plan (TopMost=True). En outre, l'une d'elles devant rester au-dessus de l'autre elles sont liées par AddOwnedForm.

    A un moment, l'une de ces deux fenêtres affiche un dialogue bloquant qui doit, bien évidemment, rester devant car il demande une réponse de l'utilisateur. L'affichage se fait sur un événement timer, par dlg.ShowDialog()

    Cela fonctionne correctement, sauf que...

    Sur une machine 64 bits équipée d'un processeur 4 cœurs j'ai récemment observé que ce dialogue s'affichait en-dessous des fenêtres de premier plan et donc était invisible. L'utilisateur ne pouvant répondre à une question qu'il ne voit pas, l'appli reste bloquée ==> Ctrl, Alt, Del !

    Est-ce un bug du Framework dans ce type de configuration matérielle ou un mauvais usage de ShowDialogue ou de la logique applicative ?

    Quelle autre méthode puis-je utiliser pour être sûr que ce dialogue apparaisse toujours au premier plan ?

    Merci de vos suggestions.

    Bien cordialement



    Alain


    • Modifié AchLog jeudi 7 novembre 2013 18:41 Ajout d'une précision
    jeudi 7 novembre 2013 18:32

Réponses

  • Bonjour,

    Lorsque vous appelez la méthode ShowDialog() essayez de passer en paramètre la fenêtre qui détient la fenêtre qui va s'afficher.

    maNouvelleFeneêtre.ShowDialog(fenêtreCourante)

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Marqué comme réponse AchLog vendredi 8 novembre 2013 19:35
    jeudi 7 novembre 2013 19:13
    Modérateur

Toutes les réponses

  • Bonjour,

    Lorsque vous appelez la méthode ShowDialog() essayez de passer en paramètre la fenêtre qui détient la fenêtre qui va s'afficher.

    maNouvelleFeneêtre.ShowDialog(fenêtreCourante)

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Marqué comme réponse AchLog vendredi 8 novembre 2013 19:35
    jeudi 7 novembre 2013 19:13
    Modérateur
  • Bonne idée. Merci Gilles.

    Le problème c'est que je n'ai pas sous la main cette machine sur laquelle j'ai constaté le problème. Je ne peux pas vérifier si votre suggestion règle le problème.

    J'ai aussi pensé à la solution suivante :

    Plutôt qu'appeler maNouvelleFenêtre.ShowDialog(fenêtreCourante) dans le code de la procédure qui gère l'échéance du timer, envoyer ici seulement un événement à la fenêtreCourante qui exécutera alors le ShowDialog.

    Qu'en pensez-vous ?

    Merci

    Cordialement


    Alain

    jeudi 7 novembre 2013 21:24
  • Bonjour,

    Cela rejoint au même...

    D'un point de vue technique spécifier le Owner de la fenêtre dans le paramètre de ShowDialog() indique à Windows que la fenêtre en dessous (celle qui est passée en paramètre) sera bloquée et inactive pour l'utilisateur tant que la fenêtre du dessus (la fenêtre sur laquelle porte la méthode ShowDialog()) est active.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    vendredi 8 novembre 2013 12:26
    Modérateur
  • Merci Gilles.

    J'ai finalement pu vérifier que la méthode que vous avez proposée est la bonne pour résoudre ce problème. Le dialogue ainsi ouvert ne peut pas passer sous la fenêtre parent.

    Bien cordialement

     


    Alain

    vendredi 8 novembre 2013 19:35