2010-02-13 3 views

risposta

0

No può fare. Dovrai costruire la tua scatola. Suppongo che questo sia WinForms, se è ASP.NET non sono qualificato per rispondere.

+0

Grazie, si prega di suggerire, è per winforms. – Karthick

4

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:

  1. Crea una nuova forma
  2. aggiungere un'etichetta e due pulsanti
  3. impostare il carattere etichetta per Bold
  4. aggiungere gestore per entrambi i pulsanti, chiudendo il modulo e impostando alcune proprietà per cui è stato premuto il pulsante.
+0

Grazie, puoi suggerire alcuni passaggi per questo? – Karthick

+7

Lo ha fatto. Il tutorial; – bmargulies

+0

sì, anche aggiunto alcuni passaggi di base come una linea guida. – Amirshk

24

È 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.

+19

A * bit * grintoso ?! :) – Tom

0

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.