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

显示字符串的C#System.Windows.Forms.Shortcut(例如CtrlX->;Ctrl+;X),c#,winforms,menuitem,C#,Winforms,Menuitem,我试图通过OwnerDraw自定义MenuItem,但现在当MenuItem包含快捷键时出现问题。我已经制定了精确的点来放置它们各自的快捷键,但是我不能得到精确的快捷键字符串。我尝试使用以下代码: var keyConverter = new KeysConverter(); var shotcutString = keyConverter.ConvertToString(System.Windows.Forms.Shortcut.CtrlX); 但它显示的结果是“CtrlX”而不是“Ctrl

我试图通过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”)

提前感谢。

要使用,您应该向。您还应该检查快捷键
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

看起来像是
键转换器。ConvertToString
默认行为是执行简单的
Enum.ToString()
转换。尝试使用
替换(“Ctrl”、“Ctrl+”)
进一步处理
Ctrl

var keyConverter = new KeysConverter();
var shotcutString = keyConverter.ConvertToString(System.Windows.Forms.Shortcut.CtrlX)
    .Replace("Ctrl", "Ctrl+");
如果需要,您还可以连接“Shift”、“Alt”等,或者创建要检查的项目列表,将其从“项目”替换为“项目+”:

var check=newlist(){“Shift”、“Ctrl”、“Alt”}//根据需要添加此项
foreach(检查中的var s)
shotcutString=shotcutString.Replace(s,s+“+”);

要使用
键转换器
您应该将
快捷方式
转换为
。您还应该检查快捷键
shortcut.None
并返回
string.Empty
var check = new List<string>() { "Shift", "Ctrl", "Alt" }; //add this as needed
foreach (var s in check)
    shotcutString = shotcutString.Replace(s, s + "+");