24

使用时,MessageBox.Show()您可以选择MessageBoxButtons。可用的按钮是一个枚举,并为您提供“Yes No”、“OK Cancel”等选项。

例如,当我使用挪威语消息文本时,用户仍然会收到英文“Yes No”。

有没有办法更改按钮的文本(在 C# 中)以使语言正确?我可以覆盖文本,或者以某种方式设置当前语言环境,以便我可以使用“Ja Nei”而不是“Yes No”吗?

我不想依赖在我的客户端安装 .NET 语言包。

4

4 回答 4

23

.NET 中没有对此的本机支持(据我所知,无论如何;如果我错了,请纠正我,任何人)。我确实遇到过这篇 CodeProject 文章,它似乎通过一些消息挂钩和 P/Invoke 来解决问题:http: //www.codeproject.com/KB/miscctrl/Localizing_MessageBox.aspx

于 2009-05-30T22:28:25.787 回答
16

通常消息框按钮(与所有 Windows 一样)支持当前为 Windows 设置的 UI 语言。因此,如果您安装了英文并且无法更改语言(MUI 版本或 Vista/7 的 Ultimate),那么您就不走运了。

你可以自己实现一个消息框,但我求你不要这样做。当人们开始重新发明方轮时,我最想念的就是按钮的常用热键、使用 Ctrl+Ins 复制内容等简单的东西。

于 2009-05-30T22:29:23.553 回答
1

我认为不可能,但请参阅 MSDN 文章MessageBox.Show Method。你可能会得到一些想法。您可以更改消息框中的文本。如何创建自己的消息框(新表单)并显示它们?

于 2009-05-30T22:29:00.200 回答
0

您可以创建一个pnlExitMode具有属性的面板 ( ),Visible=false并将信息文本以及标记为 YES 和 NO 的按钮 ( btnYes, btnNo)(带有“您的”语言的按钮标题)放在此面板上,然后将所需的 Yes/No- 操作放入按钮事件处理例程。在决策时(在我的情况下:如果ini在关闭应用程序时文件尚未写入,则发出警告)将面板设置为Visible. 将弹出带有按钮的面板。

示例代码:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (bIniModified) 
    {
        pnlExitMode.Visible = true; pnlExitMode.BringToFront();
        e.Cancel = true;
    }
}
private void btnYes_Click(object sender, EventArgs e)
{
    SaveToIni();
    pnlExitMode.Visible = false; bIniModified = false;
    Application.Exit();
}
private void btnNo_Click(object sender, EventArgs e)
{
    pnlExitMode.Visible = false; bIniModified = false;
    Application.Exit();
}
于 2019-11-12T15:57:15.720 回答