Sto creando una casella di messaggio personalizzata che consente di copiare il testo, ma volevo che assomigliasse esattamente a una finestra di messaggio standard, quindi vorrei impostare il testo dei pulsanti su qualunque sia la lingua del sistema, come fa la classe MessageBox . Qualcuno sa come ottenere quel testo ("Sì", "No", "Annulla", ecc.) ?.Come si ottiene la didascalia del pulsante MessageBox?
risposta
Grazie per le vostre risposte con il collegamento Snarfblam ho potuto 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();
}
Nel tempo digitato quel messaggio, si potrebbe avere digitato "Sì", "No", "Ok", "Annulla" ...
Sono abbastanza sicuro che l'OP vuole prendere il testo dal sistema in modo che sia nella lingua corretta (impostazioni locali del sistema) –
Esattamente Adam, è quello che mi serve quindi non devo esaurire tutte le lingue – rodrigoq
C'è un articolo su codeproject.com che parla di localizzazione finestre di messaggio - si potrebbe trovare questo link utili ...
http://www.codeproject.com/KB/miscctrl/Localizing_MessageBox.aspx
Speranza che aiuta :)
Grazie, lo stavo cercando da così tanto tempo! Questo è MOLTO utile – BornToCode
Queste stringhe sembrano essere memorizzati nella libreria User32.dll. Ci sono dettagli in this discussion sul forum Pure BASIC, verso il basso.
Grazie mille per aver trovato la soluzione, posterò il codice in pochi minuti. – rodrigoq
Se non si trova una soluzione, è possibile inserire il messaggio negli Appunti invece e informare l'utente che il messaggio è negli Appunti. – Stormenet
Se si preme Ctrl + C quando viene visualizzato un MessageBox standard, per impostazione predefinita verrà copiato il testo negli Appunti. –
Grazie per il suggerimento, ma in ogni caso ho bisogno di più personalizzazioni come le barre di scorrimento per i messaggi più grandi. – rodrigoq