30 votes

Texte en gras dans la MessageBox

Comment puis-je faire apparaître le texte en gras dans la boîte de dialogue affichée par MessageBox.Show en utilisant C# ?

31voto

Hans Passant Points 475940

C'est possible, une boîte de messages est une fenêtre ordinaire qui peut être manipulée comme n'importe quelle autre. Le code pour le faire est cependant un peu difficile. Ajoutez une nouvelle classe à votre projet et collez ce code :

using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class BoldMessageBox : IDisposable {
  private int mTries = 0;
  private Form mOwner;
  private Font mFont;

  public BoldMessageBox(Form owner) {
    mOwner = owner;
    owner.BeginInvoke(new MethodInvoker(findDialog));
  }

  private void findDialog() {
    // Enumerate windows to find the message box
    if (mTries < 0) return;
    EnumThreadWndProc callback = new EnumThreadWndProc(checkWindow);
    if (EnumThreadWindows(GetCurrentThreadId(), callback, IntPtr.Zero)) {
      if (++mTries < 10) mOwner.BeginInvoke(new MethodInvoker(findDialog));
    }
  }
  private bool checkWindow(IntPtr hWnd, IntPtr lp) {
    // Checks if <hWnd> is a dialog
    StringBuilder sb = new StringBuilder(260);
    GetClassName(hWnd, sb, sb.Capacity);
    if (sb.ToString() != "#32770") return true;
    // Got it, get the STATIC control that displays the text
    IntPtr hText = GetDlgItem(hWnd, 0xffff);
    if (hText != IntPtr.Zero) {
      // Get the current font
      IntPtr hFont = SendMessage(hText, WM_GETFONT, IntPtr.Zero, IntPtr.Zero);
      Font font = Font.FromHfont(hFont);
      // And make it bold (note the size change to keep enough space!!)
      mFont = new Font(font.FontFamily, font.SizeInPoints - 1f, FontStyle.Bold);
      SendMessage(hText, WM_SETFONT, mFont.ToHfont(), (IntPtr)1);
    }
    // Done
    return false;
  }
  public void Dispose() {
    mTries = -1;
    mOwner = null;
    if (mFont != null) mFont.Dispose();
  }

  // P/Invoke declarations
  private const int WM_SETFONT = 0x30;
  private const int WM_GETFONT = 0x31;
  private delegate bool EnumThreadWndProc(IntPtr hWnd, IntPtr lp);
  [DllImport("user32.dll")]
  private static extern bool EnumThreadWindows(int tid, EnumThreadWndProc callback, IntPtr lp);
  [DllImport("kernel32.dll")]
  private static extern int GetCurrentThreadId();
  [DllImport("user32.dll")]
  private static extern int GetClassName(IntPtr hWnd, StringBuilder buffer, int buflen);
  [DllImport("user32.dll")]
  private static extern IntPtr GetDlgItem(IntPtr hWnd, int item);
  [DllImport("user32.dll")]
  private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
}

Et utilise-le comme ça :

private void button1_Click(object sender, EventArgs e) {
  using (new BoldMessageBox(this)) {
    MessageBox.Show("Nobugz waz here");
  }
}

Il y a un défaut dans cette approche. Après avoir mis la police en gras, le texte doit encore tenir dans le contrôle statique que la boîte de message a réservé au texte. Cela m'a obligé à rendre la police plus petite. Vous devrez peut-être modifier cette valeur.

7voto

Amirshk Points 5379

Tu ne peux pas. Il s'agit d'une enveloppe pour l'API MessageBoxEx .

Créez votre propre boîte à messages personnalisée pour le faire.


Vous pouvez suivre este comme exemple de mise en œuvre.

Les étapes de base de la création d'un tel formulaire :

  1. Créer un nouveau formulaire
  2. Ajouter une étiquette et deux boutons
  3. Définissez la police de l'étiquette sur Gras
  4. ajouter un gestionnaire aux deux boutons, fermer le formulaire et définir une propriété pour le bouton qui a été pressé.

0voto

bmargulies Points 49855

Je ne peux pas. Tu vas devoir construire ta propre boîte. Je suppose qu'il s'agit de WinForms, si c'est ASP.NET je ne suis pas qualifié pour répondre.

0voto

gcoulby Points 101

Assemblage étendu de MessageBox .NET Page web XMSG .NET : plus d'infos, téléchargement

Ajuste à la volée une grande variété de paramètres visuels de MessageBox.

Les fonctions réglables comprennent la police et la couleur des messages, les légendes des boutons, les polices et les infobulles, l'arrière-plan de la boîte de dialogue, la position de la boîte de dialogue, l'icône de la boîte de dialogue, le délai d'attente, etc. Selon la police du message sélectionnée, la fenêtre de dialogue se redimensionne automatiquement pour s'adapter au message.

Contrôles supplémentaires pouvant être affichés de manière facultative : case à cocher, saisie de texte, lien web, jusqu'à 3 boutons supplémentaires.

Dans votre code .NET, vous appelez toujours MessageBox.Show. Extended MessageBox n'est pas une boîte de dialogue personnalisée. Il s'agit toujours d'une MessageBox ordinaire à laquelle on a ajouté des fonctionnalités étendues.

OS supporté : XP, 2000, 2003, 2008 Vista, Win7 -- 32 ou 64 bits.

Les téléchargements comprennent une version d'essai entièrement fonctionnelle et une version normale avec le code source C# complet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X