2010-02-13 57 views

Respuesta

0

No se puede hacer. Tendrás que construir tu propia caja. Asumo que esto es WinForms, si es ASP.NET que no estoy calificado para responder.

+0

Gracias, sugiéralos, es para winforms. – Karthick

4

No puede. Este es un contenedor para la API MessageBoxEx.

Crea tu propio cuadro de mensaje personalizado para hacerlo.


Puede seguir this tutorial, como un ejemplo de cómo implementar uno.

Los pasos básicos de la creación de una forma tal:

  1. Crear una nueva forma
  2. Añadir una etiqueta y dos botones
  3. establecer la fuente etiqueta a Negrita
  4. añadir manejador de los dos botones, cerrar el formulario y establecer algunas propiedades para las cuales se presionó el botón.
+0

Gracias, ¿pueden sugerir algunos pasos para eso? – Karthick

+7

Lo hizo. El tutorial ;. – bmargulies

+0

yup, incluso agregó algunos pasos básicos como una línea guía. – Amirshk

24

Es posible, un cuadro de mensaje es una ventana común que puede ser un desastre como cualquier otro. El código para hacerlo es sin embargo un poco arenoso. Añadir una nueva clase a su proyecto y pega este código:

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

Y utilizar de esta manera:

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

Hay una falla en este enfoque. Después de hacer que la fuente sea negrita, el texto aún debe caber en el control estático que el cuadro de mensaje reserva para el texto. Eso requirió que hiciera la fuente más pequeña. Puede que tenga que ajustar este valor.

+19

A * bit * arenoso ?! :) – Tom

0

de mensaje extendido NET XMSG .NET web page: more info, download

ajusta sobre la marcha amplia variedad de entornos visuales MessageBox.

Las características ajustables incluyen la fuente y el color del mensaje, los títulos de los botones, fuentes e información sobre herramientas, el fondo del diálogo, la posición del diálogo, el icono del diálogo, el tiempo de espera y más. Según la fuente de mensaje seleccionada, la ventana de diálogo se redimensiona automáticamente para acomodar el mensaje.

Controles adicionales que se pueden mostrar opcionalmente: casilla de verificación, entrada de texto, enlace web, hasta 3 botones adicionales.

En su código .NET todavía llama a MessageBox.Show. Extended MessageBox no es un diálogo hecho a medida. Esto sigue siendo un MessageBox regular con funciones adicionales añadidas.

Sistema operativo compatible: XP, 2000, 2003, 2008 Vista, Win7 - 32 o 64 bits.

Las descargas incluyen una versión de prueba totalmente funcional y una versión regular con el código fuente completo de C#.

Cuestiones relacionadas