如何:分配密钥.分页到ToolStripMenuItem.ShortcutKeys

本文关键字:ToolStripMenuItem ShortcutKeys 分页 密钥 分配 如何 | 更新日期: 2023-09-27 18:11:38

ToolStripMenuItem mi = new ToolStripMenuItem();
var value = new KeysConverter().ConvertFromString("PageUp");
// value = Enum.Parse(typeof (Keys), "PageUp");
var cast = (Keys) value;
mi.ShortcutKeys = cast;

我试图将字符串"PageUp"转换为适当的System.Windows.Forms.Keys值。然而,两种解析方法(Enum.Parse() vs. KeysConverter.ConvertFromString())都将value设置为LButton | Space,这导致最后一行的InvalidEnumArgumentException

背景:

  • System.Windows.Forms.Keys是一个Flags枚举
  • PageUp的值为33,LButton为1,Space为32 ==>表示Enum.Parse工作正常。

我如何正确解析"PageUp"成Keys.PageUp ?


更新:
愚蠢的我。解析工作正确。

ToolStripMenuItem mi = new ToolStripMenuItem();
mi.ShortcutKeys = Keys.PageUp;

但是这个会抛出上面提到的异常。
所以当我意识到我找错了对象:

如何将Keys.PageUp分配给ToolStripMenuItem.ShortcutKeys ?

如何:分配密钥.分页到ToolStripMenuItem.ShortcutKeys

事实证明,ShortcutKeys使用此逻辑来接受可能的快捷键(然而,None总是被接受):

public static bool IsValidShortcut(Keys shortcut) { 
    // should have a key and one or more modifiers.
    Keys keyCode = (Keys)(shortcut & Keys.KeyCode); 
    Keys modifiers = (Keys)(shortcut & Keys.Modifiers);
    if (shortcut == Keys.None) {
        return false;
    }
    else if ((keyCode == Keys.Delete) || (keyCode == Keys.Insert)) { 
        return true;
    } 
    else if (((int)keyCode >= (int)Keys.F1) && ((int)keyCode <= (int)Keys.F24)) { 
        // function keys by themselves are valid
        return true; 
    }
    else if ((keyCode != Keys.None) && (modifiers != Keys.None)) {
        switch (keyCode) {
            case Keys.Menu: 
            case Keys.ControlKey:
            case Keys.ShiftKey: 
                // shift, control and alt arent valid on their own. 
                return false;
            default: 
                if (modifiers == Keys.Shift) {
                    // shift + somekey isnt a valid modifier either
                    return false;
                } 
                return true;
        } 
    } 
    // has to have a valid keycode and valid modifier.
    return false; 
}

因此,您可以单独使用None, Delete, Insert, F1 - F12键,或使用Alt, CtrlShift键修饰符的所有其他键。

一旦你问对了问题,你就会找到答案....

这个为我澄清了这一点:将Windows Forms ToolStripMenuItem ShortcutKeys属性设置为numpad键不起作用

quote
在快捷键中必须使用CtrlAlt

相关文章:
  • 没有找到相关文章