Comment puis-je faire apparaître le texte en gras dans la boîte de dialogue affichée par MessageBox.Show
en utilisant C# ?
Réponses
Trop de publicités?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.
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 :
- Créer un nouveau formulaire
- Ajouter une étiquette et deux boutons
- Définissez la police de l'étiquette sur Gras
- ajouter un gestionnaire aux deux boutons, fermer le formulaire et définir une propriété pour le bouton qui a été pressé.
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.