Je voudrais montrer ma messagerie-boîte au centre de sa forme parent. Si je déplace le formulaire et que vous montrez la messagerie, il apparaît toujours au centre du bureau. Je veux que cela apparaisse avec la forme. Pouvez-vous me donner des astuces et des conseils? P>
5 Réponses :
Définissez le propriétaire de la fenêtre de la boîte de message dans votre fenêtre (à l'aide du premier paramètre de voir ici pour une référence. P> .Show () code>), au lieu de ne pas définir un propriétaire. P>
Pouvez-vous me donner un exemple? J'ai essayé ceci: iwin32window win = ceci; Messagebox.show (victoire, "test"); Bien que le même résultat. Messagebox est toujours apparu au milieu du bureau
Je suppose que cela dépend de ce que ce code> est. J'ai bien peur que mon expérience soit limitée à la fonction Native Win32 MessageBox () CODE>, qui est un peu différente, et j'ai eu la réponse à mi-parcours avant de réaliser que vous utilisiez des winforms. J'ai donc modifié ma réponse pour s'adapter à ce que j'ai trouvé dans la référence, mais je peux toujours avoir des détails manquants. :)
Passage d'une poignée de fenêtre vers MessageBox n'affiche pas la boîte de message au centre du parent. Il s'agit simplement d'activer minimiser / maximiser avec le parent et il n'y a pas d'icône de tâche spécifique pour la fenêtre de la boîte de message.
Pouvez-vous me donner un exemple pour afficher MessageBox au centre du parent?
@Yogesh: Intéressant, peut-être que la messagerie WinForms n'est peut-être pas implémentée à l'aide de la fonction Win32 MessageBox.
Je l'ai fait avant en C #. Voici ce que je me souviens.
Définir une classe: p> Définissez une classe basée sur la messageriebox.
Créez une classe basée sur MessageBox et créez une nouvelle méthode Afficher: p> dans votre code d'appel (ici, il est supposé être une WinForm et MsgBox est basé sur la nouvelle boîte de message Classe) Appelez la nouvelle méthode d'affichage et passez une instance IwindowowWrapper sur montrez par exemple p>
Quand vous dites "basé", voulez-vous dire hériter? Im un peu nouveau en C #. :)
Oui par ex. Classe publique MyMessageBox: Messagebox ... etc.
Vous n'avez pas à utiliser C # pour faire cela, mais c'est ce que j'ai utilisé. Est-ce la langue que vous programmez?
Le deuxième code. Est-ce que je vais hériter d'une boîtebox? ou simplement créer un formulaire avec le même style que MessageBox? Ceci.Showdialog () n'est pas disponible si j'hérite une boîte à Message
J'utilise c #. Je pense que cela n'est pas possible pour moi. n'importe qui?
@Chrisbd: Comment comptez-vous hériter d'une messagerie? Pouvez-vous donner un exemple?
Cela ne fonctionne absolument pas. Vous ne pouvez pas hériter de MessageBox.
Le meilleur moyen de le faire est d'utiliser des crochets de fenêtre et de centrer la boîte de message vous-même. Il y a un article parfait qui montre cet usage. P>
Vous pouvez le trouver ici: http://www.codeproject.com/kb/dialog/centerdialog.aspx p>
Vous pouvez également utiliser la classe dans votre application sans plonger trop profondément pour savoir comment cela fonctionne réellement. P>
L'article est génial. Il suffit de le comprendre avant de l'appliquer à mon application. tnx. Y a-t-il beaucoup plus facile? il h..
Le moyen le plus simple serait de faire une nouvelle formulaire MessageBox vous-même. Ce sera selon votre goût et ressemblera à la façon dont vous voulez que ce soit. En outre, vous pouvez ajouter des fonctionnalités que vous aimez.
Voici une solution très facile à utiliser, et cela fonctionne parfaitement: strong> étapes: p> (à l'intérieur d'un
UserControl code> ou a formulaire code>) em> p>
J'ai fait cette classe basée sur une classe pour les formulaires de Windows que j'ai trouvés Somwehere ailleurs.
Ajoutez simplement la classe à votre projet WPF et fournissez «Ceci» comme paramètre à la méthode de l'assistance comme celle-ci: P> montre la boîte de message: p>
Vous avez oublié de dire où i> vous avez volé ce code à partir de. L'attribution est importante ici. Une recherche Google présente quelques sources possibles: JasonCarr.com/technology/... , CODE.GOOGE.COM/P/LIONEDITOR/SOURCE/BROWSE/BRANCHES/... .
Bonne idée. Mais veuillez bien tenir compte de vos mots: "volé" qui est une expression dure. J'ai explicitement dit "trouvé ailleurs", mais vous avez absolument raison d'attribuer l'attribution.
Et non, le code d'origine n'était pas venu du lien que vous avez ajouté. Il est venu de Jason Carr: JasonCarr.com/technology/... . Je viens de le modifier pour travailler dans WPF. Merci Jason.
UPS. Vous n'avez pas vu que vous avez ajouté ce lien :-)
Vous devez créer une variable pour stocker le résultat de gchandle.alloc et appelez gchandle.free () à l'intérieur du raccordement de rappel après le décalagewindowshookex
Duplicaillier possible de WinForms-Comment puis-je faire apparaître MessageBox sur MainForm?