Come posso visualizzare il testo in grassetto nella finestra di dialogo visualizzata da MessageBox.Show
, utilizzando C#?Testo in grassetto in MessageBox
risposta
No può fare. Dovrai costruire la tua scatola. Suppongo che questo sia WinForms, se è ASP.NET non sono qualificato per rispondere.
Non è possibile. Questo è un wrapper per l'API MessageBoxEx.
Crea la tua casella di messaggio personalizzata per farlo.
È possibile seguire this tutorial, come un esempio di come implementare uno.
Le basi fasi di creazione di una tale forma:
- Crea una nuova forma
- aggiungere un'etichetta e due pulsanti
- impostare il carattere etichetta per Bold
- aggiungere gestore per entrambi i pulsanti, chiudendo il modulo e impostando alcune proprietà per cui è stato premuto il pulsante.
Grazie, puoi suggerire alcuni passaggi per questo? – Karthick
Lo ha fatto. Il tutorial; – bmargulies
sì, anche aggiunto alcuni passaggi di base come una linea guida. – Amirshk
È possibile che una finestra di messaggio sia una finestra normale che può essere modificata come qualsiasi altra. Il codice per farlo è comunque un po 'grintoso. Aggiungere una nuova classe al progetto e incollare questo codice:
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);
}
e usarlo in questo modo:
private void button1_Click(object sender, EventArgs e) {
using (new BoldMessageBox(this)) {
MessageBox.Show("Nobugz waz here");
}
}
C'è un difetto in questo approccio. Dopo aver reso il carattere grassetto, il testo deve ancora rientrare nel controllo statico che la casella di messaggio è riservata per il testo. Ciò mi ha richiesto di rendere il carattere più piccolo. Potrebbe essere necessario modificare questo valore.
A * bit * grintoso ?! :) – Tom
MessageBox esteso assembly .NET XMSG .NET web page: more info, download
Regola sulla grande varietà di volo MessageBox impostazioni di visualizzazione.
Le funzioni regolabili includono carattere e colore dei messaggi, didascalie dei pulsanti, caratteri e descrizioni comandi, sfondo della finestra di dialogo, posizione della finestra di dialogo, icona di dialogo, timeout e altro. A seconda del carattere del messaggio selezionato, la finestra di dialogo si ridimensiona automaticamente per accogliere il messaggio.
Controlli aggiuntivi che possono essere visualizzati facoltativamente: casella di controllo, immissione di testo, collegamento Web, fino a 3 pulsanti aggiuntivi.
Nel proprio codice .NET si chiama ancora MessageBox.Show regolare. Extended MessageBox non è una finestra di dialogo personalizzata. Questo è ancora MessageBox regolare con funzionalità estese aggiunte.
Sistema operativo supportato: XP, 2000, 2003, 2008 Vista, Win7 - 32 o 64-bit.
I download includono la versione di prova completamente funzionale e la versione normale con codice sorgente C# completo.
Grazie, si prega di suggerire, è per winforms. – Karthick