C#System.Windows.Forms.Shortcut显示字符串(例如CtrlX - > Ctrl + X)

时间:2016-05-20 02:16:24

标签: c# winforms menuitem

我正在尝试通过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”)。

提前致谢。

2 个答案:

答案 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 + "+");