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