Centrer une messagebox sur la forme

Description

Prise en main récente de .Net et déjà une déception : Les MessageBox (DialogBox en général) sont centrées sur l'écran et pas sur la forme de l'application.
A l'heure où un PC possède de plus en plus souvent plusieurs écrans, c'est un peu bête qu'ils n'aient pas pensé à cette option; surtout qu'on peut donner à l'instruction le nom du Parent. Bref.

Donc, retour vers les bonnes vieilles méthodes appliquées sous VB6 : Les APIs pour faire du Hook (*).
(*) Hooker : Intercepter les messages entre le système et les objets.

Voilà donc un petit exemple qui montre comment 'Hooker' les évènements liés (dans cet exemple) à l'apparition de fenêtres commandées par notre application.
Lors du hook, on recalcule une position centrale par rapport à la forme actuellement active et on repositionne la DialogBox avant qu'elle ne soit affichée.
De plus, si cette DialogBox venait à sortir de l'écran sur lequel se trouve la forme servant au centrage, on la déplace pour qu'elle se retrouve au bord de l'écran, bien visible.

Conçue sous VS 2010 avec le Framework 2

===========
IMPORTANT
===========
Le Debug de l'IDE de VB fait aussi du Hooking.
Pour que le hook programmé ici fonctionne en mode débogage, il faut décocher l'option "Activer le processus d'hébergement Visual Studio" dans Projet + Propriétés + Débogage.
Sinon, les DialogBox resteront centrées sur l'écran (pas de risque)

Conclusion :


Une fois le Hook lancé (au démarrage de l'application), l'utilisation des MessageBox ou OpenDialogBox reste strictement identique; rien ne change.

Il est important de 'dé-hooker' avant de quitter l'application, sinon le système enverra des messages à une procédure qui n'existe plus et ... c'est pas bon pour son coeur.

NOTA : Au moment où une DialogBox du type OpenDialogFile s'ouvre, elle n'a pas encore sa taille terminale (ajout à la volée des boutons et autres options demandées lors de la commande d'ouverture). Elle est en général plus petite.
De ce fait, lorsqu'on la centre, on centre la fenêtre d'origine et pas la fenêtre finale = petit décalage.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.