6
votes

Affichage d'une boîtebox sur toutes les formulaires, réglage de l'emplacement et / ou de la couleur

J'ai deux formes et j'ai défini l'une des formes ' la plus haute propriété sur true. Quelque part, pendant que le programme est exécuté, je montre une messagerie-matières, mais puisque la plus haute est définie sur true, lorsque la MessageBox apparaît, il se présente sous la forme la plus haute, donc je ne peux pas le voir.

  1. Y a-t-il une manière que je fais que l'une de mes formes soit toujours sur le dessus, mais lorsqu'une messagerie apparaît, faites-le afficher la boîte de message sur ce formulaire spécifique?

  2. est-il possible de donner un emplacement à la messagerie de la messagerie de sorte qu'il ne le montre pas au milieu mais par exemple bas bas à l'écran?

  3. Disons que j'ai un formulaire de couleur orange, puis-je avoir une boîte de message de couleur rose uniquement pour cette application spécifique. Je veux dire que je ne parle pas de la lecture des propriétés de couleur Windows. (Je ne veux pas tous les cases de message rose.)


2 commentaires

Si vous ne voulez pas Toutes les boîtes de messages rose, vous ne devriez pas vouloir votre boîte de message pour être rose. Il y a une raison pour que les couleurs du système standard existent.


@Codygray: Avez-vous lu le (3ème) point? Elle veut qu'un message important spécifique soit mis en surbrillance ...


7 Réponses :


1
votes

Je pense qu'il n'y a pas de fonctionnalité intégrée pour le faire dans .NET, mais je vous suggère de conserver une référence de votre formulaire le plus haut et de le changer avant de montrer chaque message, de quelque chose comme suit:

        var frm = new Form2();
        Component.InstanceOfTopMost = frm;
        frm.Show();


11 commentaires

J'ai combiné votre code et j'ai eu un tel code mais pas travaillé. Cuz pas assez d'informations sur l'instanceof ... j'ai le code ci-dessous


Void privé Picturebox1_Cliquez sur Eventargs E) {Composant.InstanceoftOp plus.topment le plus faux; Si (MessageBox.Show ("Le programme sera fermé, sinueux?", "!!! AVERTISSEMENT !!!", messageboxbuttonons.yesno) == dialogresult.yes) {application.exit (); } Composant.Instucedoftopmose.topment le plus = vrai; }


Quelle erreur ou quelle exception as-tu eu? Avez-vous peuplé l'instance de votre formulaire la plus haute?


cette image de fermeture (Picturebox1) est sur le formulaire1 et sur ce formulaire, j'ai forma forme2 que la plus haute propérisse définie sur true et lorsque je clique sur la photo de fermeture, la messagerie de la messagerie se présente, mais elle passe sous le formulaire qui est le plus haut


Vous n'avez pas répondu à ma question, avez-vous peuplé l'instance de Form2 en classe de composants?


IDE souligne le mot instance au-dessus de rouge et il est indiqué que "System.componentModel.comPonent" ne contient pas de définisions pour "instanceOtOtOtOt le plus"


Je pense que après composant. Il n'y a pas une telle chose appelée instance idiotie la plus


Désolé, un autre composant nommé de classe est l'une des classes .NET. Donnez un autre nom à votre classe. De plus, vous devez déclarer cette classe statique par vous-même.


J'ai mis à jour le message, regardez le nom de la classe des composants est juste un nom lui donnez ce que vous aimez. Ce n'est pas important, vous devez déclarer une classe qui contient une instance de votre formulaire le plus haut.


@saberamani: Je ne comprends pas. Msgbox modal fonctionne juste. Consultez mon autre post avant de le supprimer comme offtopic.


@Saberamani Merci d'avoir essayé d'aider. La solution de Quetzalcoatl a fonctionné. Pour expliquer davantage: la fonction surchargée de MessageBox 2ème résout le problème en tant que QUETZALCOATL indiquée. Donc, je le remercie beaucoup d'avoir enseigné et montrant. Donc, si j'écris MessageBox.show (FRM1, "Blargh"); // Ensuite, Msg montre sur le dessus de FRM1, peu importe si sa plus haute définie sur TRUE. Si nous écrivons FRM2, il va au-dessus de FRM2.



9
votes

1) La méthode MessageBox.Show a une surcharge em> qui prend un premier paramètre de type fenêtre. Si vous utilisez cette surcharge au lieu de simplement montrer (string), ie.:

class MyForm : Form {
    void method(){
       MessageBox.Show(this, "blablablablabla");
    }
}

p>then the MessageBox se présentera en mode "modal" et il sera exactement sur ce formulaire. Assurez-vous maintenant que vous passez cette forme la plus haute et que vous avez terminé. L'effet secondaire est que le mode «modal» provoquera la blocage de la fenêtre de la messagerie d'origine jusqu'à ce que le message soit rejeté. P>

2) Non, ce n'est pas possible directement. Cependant, vous pouvez jouer fort avec .NET et obtenir une "poignée" à la messageriebox, puis déplacez la fenêtre via p / invoquer sur certaines fonctions Winapi, mais je vous recommande pas. P>

3) Non, c'est Tout simplement pas possible avec des internautes p>

Ce que vous voulez réaliser dans (2) et (3) n'est pas possible, car labox est censé être simple. Pour obtenir ces choses, vous devrez écrire votre propre forme minuscule qui agira comme une boîte de message et présentera ce formulaire au lieu de la boîte de message. Ce formulaire sera en mesure d'avoir un style, n'importe quelle position et tout comportement que vous aimez. P> p>


5 commentaires

Lisez la question à nouveau et testez votre code. Cela ne fonctionnera pas dans ce cas.


Merci d'avoir informé et alternative Offre pour les questions 2 et 3. Je vous remercie vraiment pour cela. et pour la première partie que j'ai écrite


Void privé Picturebox1_Cliquez sur Eventargs E) {if (MessageBox.show (this »(This,« Programme »sera fermé?", "!!! AVERTISSEMENT !!!", messageboxbuton.yesno) == dialogresult.yes) { Application.exit (); }} // mais cela ne fonctionne pas


À propos de cette image de fermeture de la photo (Picturebox1) est sur le formulaire1 et sur la forme ci-dessus, j'ai form2 que les propres supérieurs sont définis sur true et lorsque je clique sur la photo de fermeture, la messagerie Messagebox se déclenche mais elle passe sous le formulaire le plus haut


@quetzalcoatl La fonction surchargée MessageBox 2ème résout le problème que QUETZALCOATL indiquée. Donc, je le remercie beaucoup d'avoir enseigné et montrant. Donc, si j'écris MessageBox.show (FRM1, "Blargh"); // Ensuite, Msg montre sur le dessus de FRM1, peu importe si sa plus haute définie sur TRUE. Si nous écrivons FRM2, il va au-dessus de FRM2. Encore une fois merci à Quetzalcoatl.



1
votes

@saber Amani: Pourquoi alors? Regardez, cela fonctionne simplement:

    using System.Windows.Forms;

    namespace ReusingUserControlsSample
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, System.EventArgs e)
            {
                Form1 second = new Form1();
                second.TopMost = true;
                second.Show();

                MessageBox.Show(second, "BLARGH");
            }

            private void InitializeComponent()
            {
                this.button1 = new System.Windows.Forms.Button();
                this.SuspendLayout();
                this.button1.Location = new System.Drawing.Point(178, 201);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(75, 23);
                this.button1.TabIndex = 0;
                this.button1.Text = "button1";
                this.button1.UseVisualStyleBackColor = true;
                this.button1.Click += new System.EventHandler(this.button1_Click);
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(284, 264);
                this.Controls.Add(this.button1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.ResumeLayout(false);

            }

            private System.Windows.Forms.Button button1;
        }
    }


1 commentaires

Les gars sont assez tard ici 03:40 Alors je vais aller dormir. Je vais vérifier vos réponses et les essayer et je vais vous retourner. Mais b4 je vais, je veux vraiment dire que je respecte toutes vos connaissances et j'envie. et je suis heureux que les gens rendent même le cerveau d'assemple ici et tentent de preuve. J'espère avoir beaucoup d'expert en très peu de temps aussi. Merci Quetzalcoat et Sabre pour avoir essayé d'aider.



5
votes

Une approche simple pour la plupart des MessageBox code> serait quelque chose comme ceci:

using (var dummy = new Form() { TopMost = true })
{
    MessageBox.Show(dummy, text, title);
}


0 commentaires

5
votes

Pour afficher un MessageBox En haut de tous les autres formulaires de votre application (y compris ceux avec le plus haut défini), vous pouvez utiliser le montre () la surcharge de la méthode qui prend un Paramètre de type Messageboxoptions et transmettez-vous MessageBoxOption.Servicénotification comme ce paramètre. XXX


0 commentaires

11
votes

J'utilise cela. XXX


2 commentaires

(Messageboxoptions) 0x40000 fait la même chose que la messagerieboxoption.Servicénotification


Servicenotification = 2097152 en valeur ENUM. Il est 0x200000



0
votes
https://stackoverflow.com/questions/29326042/show-message-box-in-net-console-application
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox

using System.Runtime.InteropServices;
//...
[DllImport("User32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr h, string m, string c, uint type);
const uint ICONERROR = 16;
const uint ICONWARNING = 48;
const uint ICONINFORMATION = 64;
const uint MB_TOPMOST = 262144;

//...
MessageBox((IntPtr)0, "Started" + DateTime.Now, "Log", ICONINFORMATION | MB_TOPMOST);

0 commentaires