我有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
}。
答案 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