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

C# System.Windows.Forms.Shortcut to display String (Ex. CtrlX -> Ctrl+X)

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

提前致谢。

使用KeysConverter you should cast Shortcut to Keys。您还应该检查快捷键 Shortcut.None 和 return 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

似乎 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" 等,或者创建要从 "Item" 替换为 "Item+" 的待检查项目列表:

var check = new List<string>() { "Shift", "Ctrl", "Alt" }; //add this as needed
foreach (var s in check)
    shotcutString = shotcutString.Replace(s, s + "+");