IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

MessageBox : Quoi, en 2023, on pose une question sur MessageBox ?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2022
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2022
    Messages : 109
    Par défaut MessageBox : Quoi, en 2023, on pose une question sur MessageBox ?
    Bonjour tout le monde,

    Est-ce que j'ai la berlue, ou sous Windows 10, MessageBox.Show affiche un message au milieu de l'écran ?

    Sous Windows 11 non, j'ai un formulaire qui occupe (à la louche) le tiers inférieur de l'écran, eh bien le MessageBox va se cacher partiellement derrière, ce qui fait que pour que les boutons soient visibles pour pouvoir cliquer dessus, il faut d'abord aller viser la barre de titre du message, pour faire un glissé de souris pour le faire monter. À la limite, si j'étais moins contrariant je validerais au clavier.

    Il y a un an ou deux, pour des sombres histoires de bouton par défaut, j'ai joué à récupérer le hWnd du message depuis un Timer, sur la base du titre du message, que pour cet effet il a fallu que je choisisse un minimum exotique.

    Est-ce qu'il va falloir de nouveau plonger là-dedans ?

    Ou est-ce qu'on peut faire de la programmation propre, avec C# sous Windows ?
    Parce que le coup du timer pour rectifier les propriétés par défaut, on est bien d'accord que c'est du bricolage ?

    ***
    Alors on peut rappeler le polisson en passant en premier paramètre du MessageBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                IWin32Window w = Control.FromHandle(this.Handle);
    Il va encore au niveau du formulaire, mais cette fois, devant.

    Quel pouvait bien être l'intérêt d'afficher le message si bas sur l'écran, à part obliger à donner le formulaire comme parent du message ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 576
    Par défaut
    ça semble être une question d'ordre de superposition.
    Si cette messagebox est un custom, il faut probablement lui indiquer sa feuille parente pour qu'elle s'affiche au dessus, voire la mettre en modal.

    Est-ce que c'est le même logiciel/même projet que tu testes sous win10 et win11 ? dans les mêmes conditions? (dimension et disposition de la fenêtre, etc)
    Si le message se positionne au milieu de la feuille et que la feuille est décalée vers le bas, le messagebox se trouvera forcément en bas, ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2022
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2022
    Messages : 109
    Par défaut
    Bonsoir,

    MessageBox, c'est toujours une fenêtre à part.
    Sauf qu'on peut la faire apparaître au-dessus du formulaire, comme je disais, en passant le formulaire comme parent en premier argument. Mais alors il faut le faire en type IWin32Window.

    Ce qui m'étonnait, c'était qu'elle ne soit pas au milieu de l'écran, auquel cas je n'aurais eu à m'occuper de rien.
    J'étais plus ronchon qu'autre chose, sur ce coup-là, je dois bien reconnaître.

    Tiens pendant qu'on y est, MessageBox a un paramètre DefaultButton, mais ça n'est pris en compte que si le MessageBox a au moins deux boutons. Dans ce cas, le curseur va sur celui indiqué par le paramètre.

    Mais si il n'y a qu'un bouton, le curseur de balade au hasard.

    Alors, on donne un titre remarquable au MessageBox pour récupérer son hWnd, puis on cherche son premier enfant, et là on place le bouton au milieu.
    Il faut trois API pour faire ça.

    Je me demande si c'est le bon endroit pour raconter ça.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 576
    Par défaut
    le curseur ne va nulle part, defaultbutton c'est le bouton qui sera validé par défaut par l'appui de la touche "Entrée".

    Si il n'y a qu'un bouton, il est de facto le bouton par défaut.

    Pour le owner, tu peux passer le this pour la Form actuelle, inutile de se compliquer.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2022
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2022
    Messages : 109
    Par défaut
    Si le curseur ne va nulle part, c'est bien un vice de conception.

    C'est dû au fait que le code du premier bouton par défaut est 0, et que ce n'est pas suffisamment spécifique.

    Alors c'est au programmeur de récupérer ça à la petite cuiller.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 576
    Par défaut
    pourquoi le curseur aurait-il besoin de se positionner de lui-même sur le bouton par défaut ?
    c'est une option des options d'ergonomie windows (par défaut non activé) https://www.pcastuces.com/pratique/astuces/5461.htm

    Si tu l'as activé, alors oui le curseur ira sur le bouton par défaut

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/09/2018, 02h17
  2. [Débutant] Afficher une fenêtre lorsque l'on pose une question
    Par lau250 dans le forum MATLAB
    Réponses: 5
    Dernier message: 24/05/2010, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo