winforms 将用户输入的字符串转换为MenuItem,Shortcut

cmssoen2  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(118)

我已经为一个应用程序编写了一个扩展框架,我希望用户能够为他们的扩展设置键盘快捷方式来运行。
当我在运行时将MenuItem添加到MainMenu控件时,我希望能够使用Crtl+N来运行扩展,而不必使用鼠标或键盘单击MenuItem。
但问题是我不知道如何将用户的字符串值转换为MenuItem.Shortcut
例如,下面是用户选择的键盘快捷键"Ctrl+N"
如何将其转换为MenuItem.Shortcut?我在MSDN上找不到任何关于此的内容。我已经阅读了文档。

dtcbnfnu

dtcbnfnu1#

您 * 可以 * 将用户输入解析为字符串,如下所示:

var shortcut = Enum.Parse(typeof(Shortcut), "CtrlN");

但我建议您不要这样做,您强制用户输入CtrlShiftF10之类的内容,并使用正确的大小写,否则输入将无法通过验证。
一个类似于PropertyGrid中所示的Shortcut转换器的专用接口会更好,这样就不会强迫用户猜测要写什么,也不会出现错别字。
但是,您也可以将Shortcut枚举器的值(表示Keys的组合)分配给ComboBox的DataSource等,以便让用户选择其中一个条目。
例如,使用MainMenu组件(在.Net Core 3.1及更高版本中已弃用)获取Shortcut枚举器的值,然后设置MenuItem的Shortcut属性:

someComboBox.DataSource = Enum.GetValues(typeof(Shortcut));
someComboBox.SelectionChangeCommitted += (s, e) => 
    { var selectedShortcut = (Shortcut)(s as ComboBox).SelectedItem; };

使用MenuStrip控件时,您必须改为将SelectedItem转换为Keys。.Net中提供了快捷方式枚举数,因此代码保持不变(转换除外):

// [...]
someComboBox.SelectionChangeCommitted += (s, e) => 
    { var selectedKeys = (Keys)(s as ComboBox).SelectedItem; };

相关问题