2010-02-13 20 views

Odpowiedz

0

Nie można zrobić. Musisz zbudować własne pudełko. Zakładam, że to jest WinForms, jeśli to jest ASP.NET, nie mam kwalifikacji do odpowiedzi.

+0

Dzięki, zasugeruj, że jest ona przeznaczona do winform. – Karthick

4

Nie możesz. To jest opakowanie dla interfejsu API MessageBoxEx.

Utwórz własną niestandardową skrzynkę wiadomości, aby to zrobić.


Możesz śledzić this samouczek, jako przykład, jak zaimplementować jeden.

Podstawy etapy tworzenia taką postać:

  1. Utwórz nowy formularz
  2. dodać etykietę i dwa przyciski
  3. ustawić czcionkę etykiety Bold
  4. dodania obsługi obu przycisków zamknięcie formularza i ustawienie właściwości, dla której naciśnięto przycisk.
+0

Dzięki, czy możesz zaproponować kilka kroków? – Karthick

+7

Zrobił to. Samouczek ;. – bmargulies

+0

tak, nawet dodano kilka podstawowych kroków jako linii pomocniczej. – Amirshk

24

Jest możliwe, że okno wiadomości jest zwykłym oknem, które można zhakować tak jak każde inne. Kod do zrobienia jest jednak trochę gritty. Dodaj nową klasę do swojego projektu i wklej ten kod:

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); 
} 

i używać go tak:

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

Jest jedna wada tego podejścia. Po wytłuszczeniu czcionki tekst musi nadal pasować do statycznej kontroli zarezerwowanej dla wiadomości. To wymagało ode mnie zmniejszenia czcionki. Być może będziesz musiał poprawić tę wartość.

+19

A * bit * gritty ?! :) – Tom

0

Rozszerzony MessageBox NET montażowe XMSG .NET web page: more info, download

Reguluje na bieżąco różnorodnych MessageBox ustawień wizualnych.

Funkcje regulowane obejmują czcionkę i kolor wiadomości, podpisy przycisków, czcionki i podpowiedzi, tło dialogowe, pozycję okna dialogowego, ikonę okna dialogowego, limit czasu i wiele innych. W zależności od wybranej czcionki wiadomości, okno dialogowe automatycznie zmienia rozmiar w celu dostosowania do wiadomości.

Dodatkowe elementy opcjonalne, które można opcjonalnie wyświetlać: pole wyboru, wprowadzanie tekstu, łącze do strony internetowej, maksymalnie 3 dodatkowe przyciski.

W swoim kodzie .NET nadal dzwonisz do zwykłego MessageBox.Show. Extended MessageBox nie jest niestandardowym dialogiem. To wciąż zwykły MessageBox z dodanymi funkcjami rozszerzonymi.

Obsługiwane systemy operacyjne: XP, 2000, 2003, 2008 Vista, Win7 - 32 lub 64-bit.

Pobieranie obejmuje w pełni funkcjonalną wersję próbną i regularną wersję z pełnym kodem źródłowym C#.

Powiązane problemy