Question

Comment peut-on aller sur la création d'un Modeless MessageBox? Dois-je simplement créer ma propre classe Windows Form et l'utiliser? Si oui, est-il un moyen facile d'ajouter une icône d'avertissement (plutôt que d'insérer ma propre image d'un) et le redimensionnement en fonction du volume de texte?

Était-ce utile?

La solution

Vous devez créer un formulaire et l'utilisation Show() pour l'afficher Modeless. MessageBox.Show(...) se comportait Modal comme on le voit dans l'exemple par ghiboz; « Description du message » est affiché jusqu'à ce que l'utilisateur appuie sur un bouton.

Avec MessageBox.Show(...) vous obtenez le résultat dès que le messagebox est fermé; avec une boîte de message modales, votre code devra avoir un mécanisme comme un événement à réagir lorsque l'utilisateur éventuellement de la chose sur votre boîte de message.

Autres conseils

Si vous avez besoin d'une boîte de message qui vient de se affiche pendant votre code continue en cours d'exécution en arrière-plan (la boîte est toujours modale et empêche l'utilisateur d'utiliser d'autres fenêtres jusqu'à ce que vous cliquez sur OK), vous pouvez toujours lancer la boîte de message son propre fil et continuer à faire ce que jamais vous faites dans le fil d'origine:

    // Do stuff before.
    // Start the message box -thread:
    new Thread(new ThreadStart(delegate
    {
      MessageBox.Show
      (
        "Hey user, stuff runs in the background!", 
        "Message",
        MessageBoxButtons.OK,
        MessageBoxIcon.Warning
      );
    })).Start();
    // Continue doing stuff while the message box is visible to the user.
    // The message box thread will end itself when the user clicks OK.

À moins d'écrire le code, vous pouvez créer une petite forme dans le constructeur effectue les opérations suivantes

  • Prend une chaîne de paramètres comme le message à afficher
  • Remplit une étiquette sur la forme avec cette chaîne
  • Charge une icône avec l'une des suivantes (passage dans un Enum au constructeur)
    • SystemIcons.Application
    • SystemIcons.Asterix
    • SystemIcons.Error
    • SystemIcons.Exclamation
    • SystemIcons.Hand
    • SystemIcons.Information
    • SystemIcons.Question
    • SystemIcons.Shield
    • SystemIcons.Warning
    • SystemIcons.WinLogo
  • Appels Show () qui le fera être un dialogue modal

Si tu voulais vraiment, vous pouvez écouter un événement qui est déclenché lorsque le bouton OK est poussé.

Vous pouvez utiliser l'icône standard d'avertissement du système en utilisant SystemIcons

Vous devez soit utiliser le formulaire et appelez showDialog ()

Et pour utiliser des icônes

MessageBoxIcon.Warning

// pas CommNet

object sync = new object();
ManualResetEvent Wait = new ManualResetEvent();
//you should create a place holder named MessageData for Message Data.
List<MessageData> Messages = new List<MessageData>();
internal void ShowMessage(string Test, string Title, ....)
{
    MessageData MSG = new MessageData(Test, Title);
    Wait.Set();
    lock(sync) Messages.Add(MSG);
}
// another thread should run here.
void Private_Show()
{
    while(true)
{
        while(Messsages.Count != 0)
        {
            MessageData md;
            lock(sync)
            {
                md = List[0];
                List.RemoveAt(0);
            }
            MessageBox.Show(md.Text, md.Title, md....);
        }
        Wait.WaitOne();
    }
}

a besoin de plus de fils et plus de code (je n'ai pas assez de temps pour écrire) pour MessageBoxes simultanées.

Remarque: cela va créer une boîte de dialogue Modal, ce qui est ce que la question demande

ici est un exemple de code

if (MessageBox.Show("Description of the message", "Caption text", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes)
{
    // Do some stuff if yes pressed
}
else
{
    // no pressed
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top