Domanda

Sto facendo una finestra di messaggio personalizzato che consente di copiare il testo, ma volevo farlo sembrare esattamente come una finestra di messaggio standard, quindi vorrei impostare il testo pulsanti per qualunque sia la lingua del sistema è, come la classe MessageBox lo fa. Qualcuno sa come ottenere quel testo ( "Sì", "No", "Annulla", ecc)?.

È stato utile?

Soluzione

Grazie per le vostre risposte con collegamento Snarfblam riuscivo a capire il 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();

}

Altri suggerimenti

Queste stringhe sembrano essere memorizzati nella libreria User32.dll. Ci sono dettagli in questa discussione di questo forum BASIC Pure, verso il basso.

C'è un articolo su codeproject.com che parla di localizzazione finestre di messaggio - si potrebbe trovare questo link utile ...

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

Speranza che aiuta )

Si potrebbe aprire la System.Windows.Forms.dll in Riflettore vedere come è l'impostazione del testo del pulsante.

Nel tempo digitato quel messaggio, si potrebbe avere digitato "Sì", "No", "Ok", "Annulla" ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top