OVH Cloud OVH Cloud

MessageBox

8 réponses
Avatar
Flack
Hello,

J'ai une petite appli. la taille du formulaire ne prend pas tout l'écran.
Petite question lorsque je clic sur un boutton je demande d'afficher un
message de confirmation
DialogResult result = MessageBox.Show(this ,"Valider
l'enregistrement?","Confirmation",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
Dans l'aide c'est marqué qui si on indique l'owner (this) le messagebox
s'affiche au milieu. or comme vous pouvez le voir je lui ai bien donné
l'indication mais la boite de dialogue s'affiche au milieu de mon écran et
pas du tout au milieu de mon formulaire.
Qqn a t'il la solution?
merci

8 réponses

Avatar
Paul Bacelar
Vous prenez vos rêves pour la réalité.
Le owner n'indique que la boîte de dialogue soit au-dessus (au sens Z-order)
de l'objet this.
Il n'y a rien d'indiqué qu'en à un centrage.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsmessageboxclassshowtopic12.asp

Utilisez:
- System.Windows.Forms.Screen
- System.Windows.Forms.Control.Location
--
Paul Bacelar

"Flack" wrote in message
news:
Hello,

J'ai une petite appli. la taille du formulaire ne prend pas tout l'écran.
Petite question lorsque je clic sur un boutton je demande d'afficher un
message de confirmation
DialogResult result = MessageBox.Show(this ,"Valider



l'enregistrement?","Confirmation",MessageBoxButtons.OKCancel,MessageBoxIcon.
Question);
Dans l'aide c'est marqué qui si on indique l'owner (this) le messagebox
s'affiche au milieu. or comme vous pouvez le voir je lui ai bien donné
l'indication mais la boite de dialogue s'affiche au milieu de mon écran et
pas du tout au milieu de mon formulaire.
Qqn a t'il la solution?
merci


Avatar
Flack
Ok merci mais es-ce que vous avez un exemple un peu concret car je ne vois
pas quel lien faire entre control.location, screen et messageBox.
J'imagine qu'il faut que je créer ma propre boîte de dialogue?
merci

"Paul Bacelar" a écrit :

Vous prenez vos rêves pour la réalité.
Le owner n'indique que la boîte de dialogue soit au-dessus (au sens Z-order)
de l'objet this.
Il n'y a rien d'indiqué qu'en à un centrage.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsmessageboxclassshowtopic12.asp

Utilisez:
- System.Windows.Forms.Screen
- System.Windows.Forms.Control.Location
--
Paul Bacelar

"Flack" wrote in message
news:
> Hello,
>
> J'ai une petite appli. la taille du formulaire ne prend pas tout l'écran.
> Petite question lorsque je clic sur un boutton je demande d'afficher un
> message de confirmation
> DialogResult result = MessageBox.Show(this ,"Valider
>
l'enregistrement?","Confirmation",MessageBoxButtons.OKCancel,MessageBoxIcon.
Question);
> Dans l'aide c'est marqué qui si on indique l'owner (this) le messagebox
> s'affiche au milieu. or comme vous pouvez le voir je lui ai bien donné
> l'indication mais la boite de dialogue s'affiche au milieu de mon écran et
> pas du tout au milieu de mon formulaire.
> Qqn a t'il la solution?
> merci





Avatar
Paul Bacelar
Oui.

Vous utilisez System.Windows.Forms.Screen pour avoir la taille de l'écran et
System.Windows.Forms.Control.Location pour positionner votre boite de
dialogue par rapport à sa fenêtre parente (pas owner).
--
Paul Bacelar


"Flack" wrote in message
news:
Ok merci mais es-ce que vous avez un exemple un peu concret car je ne vois
pas quel lien faire entre control.location, screen et messageBox.
J'imagine qu'il faut que je créer ma propre boîte de dialogue?
merci

"Paul Bacelar" a écrit :

> Vous prenez vos rêves pour la réalité.
> Le owner n'indique que la boîte de dialogue soit au-dessus (au sens


Z-order)
> de l'objet this.
> Il n'y a rien d'indiqué qu'en à un centrage.
>


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsmessageboxclassshowtopic12.asp
>
> Utilisez:
> - System.Windows.Forms.Screen
> - System.Windows.Forms.Control.Location
> --
> Paul Bacelar
>
> "Flack" wrote in message
> news:
> > Hello,
> >
> > J'ai une petite appli. la taille du formulaire ne prend pas tout


l'écran.
> > Petite question lorsque je clic sur un boutton je demande d'afficher


un
> > message de confirmation
> > DialogResult result = MessageBox.Show(this ,"Valider
> >
>


l'enregistrement?","Confirmation",MessageBoxButtons.OKCancel,MessageBoxIcon.
> Question);
> > Dans l'aide c'est marqué qui si on indique l'owner (this) le


messagebox
> > s'affiche au milieu. or comme vous pouvez le voir je lui ai bien donné
> > l'indication mais la boite de dialogue s'affiche au milieu de mon


écran et
> > pas du tout au milieu de mon formulaire.
> > Qqn a t'il la solution?
> > merci
>
>
>


Avatar
Zoury
Bonjour ! :O)

Le problème est que MessageBox() ne renvoit pas de référence sur la fenêtre
créer ce qui rend difficile la manipulation de celle-ci. De plus, lorsque la
boite de dialogue apparait, ton code "gèle" sur la ligne MessageBox.Show()
et attend une réponse avant de continuer l'exécution (tu ne peux donc plus
exécuter de code pour effectuer le positionnement...).

Tu dois employé les APIs si tu veux y parvenir. Voici un exemple en VB 6
permettant de positionner un CommonDialog (qui posent les problèmes que le
MessageBox puisqu'il s'agit de fenêtre modale attendant une réponse avant de
poursuivre l'exécution).
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/a12f27e2e7fa5c47/4924f421e4d41234?lnk=st&q=setwindowpos+%2Bsettimer+author:zoury&rnum=2&hl=fr#4924f421e4d41234

Si tu as besoin d'aide pour la traduction en CSharp, n'hésite pas.

--
Cordialement
Yanick
MVP pour Visual Basic
"Paul Bacelar" a écrit dans le message
de news:
Oui.

Vous utilisez System.Windows.Forms.Screen pour avoir la taille de l'écran
et
System.Windows.Forms.Control.Location pour positionner votre boite de
dialogue par rapport à sa fenêtre parente (pas owner).
--
Paul Bacelar


"Flack" wrote in message
news:
Ok merci mais es-ce que vous avez un exemple un peu concret car je ne
vois
pas quel lien faire entre control.location, screen et messageBox.
J'imagine qu'il faut que je créer ma propre boîte de dialogue?
merci

"Paul Bacelar" a écrit :

> Vous prenez vos rêves pour la réalité.
> Le owner n'indique que la boîte de dialogue soit au-dessus (au sens


Z-order)
> de l'objet this.
> Il n'y a rien d'indiqué qu'en à un centrage.
>


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsmessageboxclassshowtopic12.asp
>
> Utilisez:
> - System.Windows.Forms.Screen
> - System.Windows.Forms.Control.Location
> --
> Paul Bacelar
>
> "Flack" wrote in message
> news:
> > Hello,
> >
> > J'ai une petite appli. la taille du formulaire ne prend pas tout


l'écran.
> > Petite question lorsque je clic sur un boutton je demande d'afficher


un
> > message de confirmation
> > DialogResult result = MessageBox.Show(this ,"Valider
> >
>


l'enregistrement?","Confirmation",MessageBoxButtons.OKCancel,MessageBoxIcon.
> Question);
> > Dans l'aide c'est marqué qui si on indique l'owner (this) le


messagebox
> > s'affiche au milieu. or comme vous pouvez le voir je lui ai bien
> > donné
> > l'indication mais la boite de dialogue s'affiche au milieu de mon


écran et
> > pas du tout au milieu de mon formulaire.
> > Qqn a t'il la solution?
> > merci
>
>
>






Avatar
Flack
merci beaucoup pour votre aide. j'vais voir ce que j'arrive a faire avec ça

"Zoury" a écrit :

Bonjour ! :O)

Le problème est que MessageBox() ne renvoit pas de référence sur la fenêtre
créer ce qui rend difficile la manipulation de celle-ci. De plus, lorsque la
boite de dialogue apparait, ton code "gèle" sur la ligne MessageBox.Show()
et attend une réponse avant de continuer l'exécution (tu ne peux donc plus
exécuter de code pour effectuer le positionnement...).

Tu dois employé les APIs si tu veux y parvenir. Voici un exemple en VB 6
permettant de positionner un CommonDialog (qui posent les problèmes que le
MessageBox puisqu'il s'agit de fenêtre modale attendant une réponse avant de
poursuivre l'exécution).
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/a12f27e2e7fa5c47/4924f421e4d41234?lnk=st&q=setwindowpos+%2Bsettimer+author:zoury&rnum=2&hl=fr#4924f421e4d41234

Si tu as besoin d'aide pour la traduction en CSharp, n'hésite pas.

--
Cordialement
Yanick
MVP pour Visual Basic
"Paul Bacelar" a écrit dans le message
de news:
> Oui.
>
> Vous utilisez System.Windows.Forms.Screen pour avoir la taille de l'écran
> et
> System.Windows.Forms.Control.Location pour positionner votre boite de
> dialogue par rapport à sa fenêtre parente (pas owner).
> --
> Paul Bacelar
>
>
> "Flack" wrote in message
> news:
>> Ok merci mais es-ce que vous avez un exemple un peu concret car je ne
>> vois
>> pas quel lien faire entre control.location, screen et messageBox.
>> J'imagine qu'il faut que je créer ma propre boîte de dialogue?
>> merci
>>
>> "Paul Bacelar" a écrit :
>>
>> > Vous prenez vos rêves pour la réalité.
>> > Le owner n'indique que la boîte de dialogue soit au-dessus (au sens
> Z-order)
>> > de l'objet this.
>> > Il n'y a rien d'indiqué qu'en à un centrage.
>> >
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsmessageboxclassshowtopic12.asp
>> >
>> > Utilisez:
>> > - System.Windows.Forms.Screen
>> > - System.Windows.Forms.Control.Location
>> > --
>> > Paul Bacelar
>> >
>> > "Flack" wrote in message
>> > news:
>> > > Hello,
>> > >
>> > > J'ai une petite appli. la taille du formulaire ne prend pas tout
> l'écran.
>> > > Petite question lorsque je clic sur un boutton je demande d'afficher
> un
>> > > message de confirmation
>> > > DialogResult result = MessageBox.Show(this ,"Valider
>> > >
>> >
> l'enregistrement?","Confirmation",MessageBoxButtons.OKCancel,MessageBoxIcon.
>> > Question);
>> > > Dans l'aide c'est marqué qui si on indique l'owner (this) le
> messagebox
>> > > s'affiche au milieu. or comme vous pouvez le voir je lui ai bien
>> > > donné
>> > > l'indication mais la boite de dialogue s'affiche au milieu de mon
> écran et
>> > > pas du tout au milieu de mon formulaire.
>> > > Qqn a t'il la solution?
>> > > merci
>> >
>> >
>> >
>
>





Avatar
Mehdi
On Mon, 24 Oct 2005 16:55:21 -0400, Zoury wrote:

Le problème est que MessageBox() ne renvoit pas de référence sur la fenêtre
créer ce qui rend difficile la manipulation de celle-ci. De plus, lorsque la
boite de dialogue apparait, ton code "gèle" sur la ligne MessageBox.Show()
et attend une réponse avant de continuer l'exécution (tu ne peux donc plus
exécuter de code pour effectuer le positionnement...).

Tu dois employé les APIs si tu veux y parvenir. Voici un exemple en VB 6
permettant de positionner un CommonDialog (qui posent les problèmes que le
MessageBox puisqu'il s'agit de fenêtre modale attendant une réponse avant de
poursuivre l'exécution).
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/a12f27e2e7fa5c47/4924f421e4d41234?lnk=st&q=setwindowpos+%2Bsettimer+author:zoury&rnum=2&hl=fr#4924f421e4d41234



Le plus simple serai quand meme de tout betement refaire une message box et
de mettre sa propriété StartPosition a CenterParent.
Avatar
Zoury
Bonjour !

Le plus simple serai quand meme de tout betement refaire une message box
et
de mettre sa propriété StartPosition a CenterParent.



Ça dépend toujours des besoins.. S'il n'a besoin que d'une boite de message
bête bête alors là, oui, c'est sûr.

D'un autre côté, la boîte de message Windows offre beaucoup d'options
intéressantes tels que les enumérations de buttons, d'icônes, le
dimensionnement automatique de la fenêtre selon le texte, etc.. Reprogrammer
le tout pourrait rapidement devenir plus long et plus couteux.. :O/

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Mehdi
On Tue, 25 Oct 2005 10:31:55 -0400, Zoury wrote:

Le plus simple serai quand meme de tout betement refaire une message box
et
de mettre sa propriété StartPosition a CenterParent.



Ça dépend toujours des besoins.. S'il n'a besoin que d'une boite de message
bête bête alors là, oui, c'est sûr.

D'un autre côté, la boîte de message Windows offre beaucoup d'options
intéressantes tels que les enumérations de buttons, d'icônes, le
dimensionnement automatique de la fenêtre selon le texte, etc.. Reprogrammer
le tout pourrait rapidement devenir plus long et plus couteux.. :O/



Ca peut prendre un peu de temps oui, mais je pense qu'une MessageBox
customisée est le genre de truc essentiel dans tout projet ayant une UI. Si
l'OP est interessé:

- pour les boutons, ce n'est pas sorcier: tous les mettre sur la Form dans
le designer, mettre leur DialogResult a la valeur qui va bien, puis dans le
code, un switch/case qui les cache ou pas en fonction de ce que veut
l'appelant et qui repositionne les boutons qui sont visibles.

- Pour les icones, la classe SystemIcons a tout ce qu'il faut. Utiliser une
PictureBox, SizeMode a AutoSize et, la encore, un switch/case qui affecte
la bonne icone a la PictureBox en fonction des souhaits de l'appelant. Seul
probleme: par défault, les SystemIcons sont dessinées de maniere assez
crade dans une PictureBox. Une petite fonction sur http://dotnetrix.co.uk/
permet de résoudre le probleme (aller dans Tips -> Miscellaneous Tips ->
Get Alpha Bitmap from 32 bit Icon).

- Le plus chiant sera de redimensionner la Form en fonction du texte
affiché. Une petite fonction imparfaite qui redimensionne en hauteur (la
largeur est laissée telle qu'elle est) un Label en fonction du texte qu'il
contient:

private static void SizeLabel(Label label)
{
try
{
Graphics g = Graphics.FromHwnd(label.Handle);
SizeF size = g.MeasureString(label.Text, label.Font, new
SizeF(label.Width, label.Height));
g.Dispose();
label.Height = Convert.ToInt32(size.Height)
}
catch
{}
}

Probleme avec cette fonction: la hauteur calculée est souvent un peu trop
juste donc il vaut mieux rajouter quelques pixels. Si quelqu'un a une
meilleure implémentation, je suis preneur.

Avec ca, il y a moyen de faire une custom MessageBox en quelques minutes
(avec un dimensionnement pas top certes).