我正在尝试通过OwnerDraw自定义MenuItem,现在我在MenuItem包含快捷键时遇到问题。我已经制定了准确的点来放置他们各自的快捷方式,但我无法获得确切的快捷方式字符串。我试图使用这段代码:
var keyConverter = new KeysConverter();
var shotcutString = keyConverter.ConvertToString(System.Windows.Forms.Shortcut.CtrlX);
但显示的结果是“CtrlX”而不是“Ctrl + X”。
现在,我想问一下如何将快捷方式(System.Windows.Forms.Shortcut)转换为显示字符串值? (例如:CtrlX>“Ctrl + X”)。
提前致谢。
答案 0 :(得分:1)
要使用KeysConverter
,您应该将Shortcut
投射到Keys
。您还应检查快捷键Shortcut.None
并返回string.Empty
。您可以使用此方法:
public string ShortcutToText(Shortcut shortcutKeys)
{
if (shortcutKeys == Shortcut.None)
{
return string.Empty;
}
return new KeysConverter().ConvertToString((Keys)shortcutKeys);
}
例如:
MessageBox.Show(ShortcutToText(System.Windows.Forms.Shortcut.CtrlX));
显示Ctrl+X
答案 1 :(得分:1)
似乎KeysConverter.ConvertToString
默认行为正在执行简单的Enum.ToString()
转换。尝试使用Replace("Ctrl", "Ctrl+")
进一步处理Ctrl
:
var keyConverter = new KeysConverter();
var shotcutString = keyConverter.ConvertToString(System.Windows.Forms.Shortcut.CtrlX)
.Replace("Ctrl", "Ctrl+");
如果需要,您还可以连接" Shift"," Alt"等,或者创建要从"项目"中替换的待检查项目列表。到"项目+":
var check = new List<string>() { "Shift", "Ctrl", "Alt" }; //add this as needed
foreach (var s in check)
shotcutString = shotcutString.Replace(s, s + "+");