我正在制作一个自定义消息框,可以让您复制文本,但我希望它看起来完全像一个标准消息框,所以我想将按钮文本设置为任何系统语言,就像MessageBox类一样。 有没有人知道如何获得该文本(“是”,“否”,“取消”等)?如何获取MessageBox按钮标题?
回答
感谢您的解答与Snarfblam链接我可以找出其余的。
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();
}
在您键入该消息的时候,你可以键入“是”,“否”,“确定”,“取消” ...
我很确定OP希望从系统中获取文本,以便它使用正确的语言(系统区域设置) – 2009-05-31 17:10:35
正是Adam,这就是我所需要的,所以我不必耗尽所有语言 – rodrigoq 2009-05-31 17:19:33
你可能会打开System.Windows.Forms.dll的中Reflector并查看它是如何设置按钮文本的。
上有codeproject.com谈到有关本地化消息框的文章 - 你可能会发现此链接有用...
http://www.codeproject.com/KB/miscctrl/Localizing_MessageBox.aspx
希望它能帮助:)
这些字符串似乎存储在User32.dll库中。底部是Pure BASIC论坛上的this discussion的详细信息。
- 1. 如何删除MessageBox按钮?
- 2. MessageBox按钮?
- 3. 如何获得md按钮标题
- 4. 如何本地化Metro MessageBox按钮
- 5. MessageBox展开按钮以获取更多错误说明
- 6. MessageBox按钮 - 设置语言?
- 7. GXT MessageBox - 自定义按钮
- 8. C#MessageBox的按钮和UI
- 9. 如何获得长按按钮的当前标题
- 10. SWT:自定义MessageBox /更多文本/如何获取图标?
- 11. 如何从一组按钮中获取所有按钮标记值
- 12. 按标题(或标记)获取ContentControl
- 13. Android:如何居中按钮标题?
- 14. National MessageBox标题翻译
- 15. Android标题按钮
- 16. AS3 - 按钮标题
- 17. 如何在按钮上拖曳按钮或标题?
- 18. 如何获取表格标题中选中的单选按钮的位置
- 19. 如何从按钮中的第一和第二行标题中获取文本
- 20. 如何获取图片旁边标题中的导航链接(按钮)
- 21. 获取按钮的相关标签
- 22. 在iPhone中获取按钮标记值
- 23. 闪光按钮:获取框架标签?
- 24. 按钮,图标和标题
- 25. iPhone如何获得标题的自定义后退按钮
- 26. 如何获得Office 2010等标题栏按钮?
- 27. 如何获得标题和按钮/链接联机
- 28. 获取被触摸的按钮的标题
- 29. 触发事件并获取按钮Titanium的标题
- 30. 在其单击事件中获取按钮标题
如果您找不到解决方案,也许可以将消息文本放在剪贴板上,并通知用户消息在剪贴板上。 – Stormenet 2009-05-31 17:32:36
如果在显示标准MessageBox时按Ctrl + C,默认情况下它会将文本复制到剪贴板。 – 2009-05-31 17:49:23
感谢您的提示,但无论如何,我需要更多的定制,如滚动条更大的消息。 – rodrigoq 2009-05-31 18:18:45