如何在VS C#

时间:2016-05-08 12:56:38

标签: c# visual-studio localization keyboard-shortcuts

我有ToolStripMenuItem ShortcutKeys Ctrl + Oemcomma(即Ctrl+,)。我想在项目名称附近显示该快捷方式,以便用户可以看到该快捷方式。不幸的是,它显示为Ctrl+Oemcomma,而不是更容易理解Ctrl+,

属性ShortcutKeyDisplayString会覆盖自动创建的字符串,因此可以修复它。但是,一旦应用程序以不调用控制键Ctrl的语言运行(例如在德国,它被称为Strg),那么ShortcutKeyDisplayString看起来是错误的,如所有其他自动创建的快捷方式描述都被翻译(即如果在英语操作系统中,描述显示为Ctrl+S,则在德语操作系统中显示Strg+S)。

是否有一个函数返回键的本地化名称,以便我可以使用它来设置ShortcutKeyDisplayString?即我正在寻找一个在英语操作系统中返回Ctrl的函数和在德语操作系统等中返回Strg的函数。我尝试System.Windows.Forms.Keys.Control.ToString(),但当然只返回Control }。

2 个答案:

答案 0 :(得分:1)

TypeConverter枚举类型定义Keys 我们继承自KeysConverter,因为这是TypeConverter的关联Keys,我们只需要处理Keys.Oemcomma值。

public class ShortcutKeysConverter : KeysConverter
{
    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        if (Type.Equals(destinationType, typeof(string)) && value is Keys)
        {
            var key = (Keys)value;

            if (key.HasFlag(Keys.Oemcomma))
            {
                string defaultDisplayString =
                    base
                        .ConvertTo(context, culture, value, destinationType)
                        .ToString();

                return defaultDisplayString.Replace(Keys.Oemcomma.ToString(), ",");
            }
        }

        return base.ConvertTo(context, culture, value, destinationType);
    }
}

然后在Program.cs之前呼叫Application.Run(...)

TypeDescriptor
    .AddAttributes(
        typeof(Keys),
        new TypeConverterAttribute(typeof(ShortcutKeysConverter))
    );

答案 1 :(得分:0)

根据Gabors的回答,我解决了如下问题。它可能是hacky,但它很简短并且有效。

int