按钮工具提示未获得本地化

时间:2016-07-13 13:27:25

标签: c# .net winforms localization tooltip

我有一个扩展按钮类,如下所示;

class ExtendedButton : Button
{
    private ToolTip _tooltip = new ToolTip();

    public ExtendedButton()
    {
        _tooltip.SetToolTip(this, StringResources.MyLocalizedTooltipString);
    }
}

在上面的代码中,' StringResources.MyLocalizedTooltipString'包含各种语言的字符串。但是当我改变线程文化时,工具提示文本不会改变。怎么实现呢? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

这是正常的。 SetToolTip方法接受字符串,它将在调用SetToolTip时显示基于当前文化从资源中提取的文本,并且在运行时更改文化不会对其产生任何影响。 因此,由于设置工具提示是在按钮的构造函数中执行的,因此将使用当时线程的文化。

如果您希望工具提示自动动态使用当前文化,作为选项,您可以将虚拟文本设置为工具提示(以启用工具提示),然后处理工具提示的Popup事件,将本地化值分配给工具提示:

class ExtendedButton : Button
{
    private ToolTip _tooltip = new ToolTip();

    public ExtendedButton()
    {
        _tooltip.Popup += new PopupEventHandler(_tooltip_Popup);
        _tooltip.SetToolTip(this, "DUMMYTEXT");
    }

    void _tooltip_Popup(object sender, PopupEventArgs e)
    {
        if (_tooltip.GetToolTip(this) != StringResources.MyLocalizedTooltipString)
            _tooltip.SetToolTip(this, StringResources.MyLocalizedTooltipString);
    }
}

注意:如果您的目标不是使工具提示动态可本地化,并且您只需要可本地化的工具提示,Localizable的{​​{1}}属性的工作方式,请转到Form组件的设计者并将ExtendedButton属性设置为Localizable,然后对不同的cltures使用不同的工具提示文本。

但请记住,在创建组件之后,不能在运行时以不经意的方式更改值。

以下是一个例子:

true

答案 1 :(得分:0)

要全面设置文化,您需要为当前线程设置CurrentCultureCurrentUICulture,如果要在应用程序中创建任何新线程,{{3} }和DefaultThreadCurrentCulture

例如:

var frenchCulture = new CultureInfo("fr-FR");

Thread.CurrentThread.CurrentCulture = frenchCulture;
Thread.CurrentThread.CurrentUICulture = frenchCulture;
CultureInfo.DefaultThreadCurrentCulture = frenchCulture;
CultureInfo.DefaultThreadCurrentUICulture = frenchCulture;

这应该在您的程序的Main方法中完成,在加载任何表单之前和调用DefaultThreadCurrentUICulture之前。

从MSDN,关于设置默认线程UI文化:

  

除非明确设置,否则DefaultThreadCurrentUICulture属性的值为null,并且应用程序域中尚未分配显式区域性的所有线程的当前区域性由默认Windows系统区域定义。