Pregunta

Estoy haciendo un cuadro de mensaje personalizado que le permite copiar texto, pero quería que se vea exactamente igual que un cuadro de mensaje estándar, por lo que me gustaría establecer el texto botones para cualquiera que sea el idioma del sistema es, como la clase de mensaje hace. ¿Alguien sabe cómo conseguir que el texto ( "Sí", "No", "Cancelar", etc)?.

¿Fue útil?

Solución

Gracias por sus respuestas con enlace Snarfblam pude averiguar el resto.

class Program {

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax);
[DllImport("kernel32")]
static extern IntPtr LoadLibrary(string lpFileName);

private const uint OK_CAPTION = 800;
private const uint CANCEL_CAPTION = 801;
private const uint ABORT_CAPTION = 802;
private const uint RETRY_CAPTION = 803;
private const uint IGNORE_CAPTION = 804;
private const uint YES_CAPTION = 805;
private const uint NO_CAPTION = 806;
private const uint CLOSE_CAPTION = 807;
private const uint HELP_CAPTION = 808;
private const uint TRYAGAIN_CAPTION = 809;
private const uint CONTINUE_CAPTION = 810;

static void Main(string[] args) {
    StringBuilder sb = new StringBuilder(256);

    IntPtr user32 = LoadLibrary(Environment.SystemDirectory + "\\User32.dll");

    LoadString(user32, OK_CAPTION, sb, sb.Capacity);
    string ok = sb.ToString();

    LoadString(user32, CANCEL_CAPTION, sb, sb.Capacity);
    string cancel = sb.ToString();

    LoadString(user32, ABORT_CAPTION, sb, sb.Capacity);
    string abort = sb.ToString();

    LoadString(user32, RETRY_CAPTION, sb, sb.Capacity);
    string retry = sb.ToString();

    LoadString(user32, IGNORE_CAPTION, sb, sb.Capacity);
    string ignore = sb.ToString();

    LoadString(user32, YES_CAPTION, sb, sb.Capacity);
    string yes = sb.ToString();

    LoadString(user32, NO_CAPTION, sb, sb.Capacity);
    string no = sb.ToString();

    LoadString(user32, CLOSE_CAPTION, sb, sb.Capacity);
    string close = sb.ToString();

    LoadString(user32, HELP_CAPTION, sb, sb.Capacity);
    string help = sb.ToString();

    LoadString(user32, TRYAGAIN_CAPTION, sb, sb.Capacity);
    string tryAgain = sb.ToString();

    LoadString(user32, CONTINUE_CAPTION, sb, sb.Capacity);
    string cont = sb.ToString();

}

Otros consejos

Estas cuerdas parecen estar almacenado en la biblioteca User32.dll. Hay detalles en esta discusión del foro BÁSICO puro, hacia la parte inferior.

Hay un artículo sobre codeproject.com que habla sobre la localización de los cuadros de mensaje - que puede encontrar este enlace útil ...

http://www.codeproject.com/KB/miscctrl/Localizing_MessageBox.aspx

Espero que ayuda )

Es posible abrir la System.Windows.Forms.dll en reflector y ver cómo se está preparando el texto del botón.

En el momento en que escribió ese mensaje, que podría haber escrito "Sí", "No", "aceptable", "Cancelar" ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top