Exemplo n.º 1
0
        private bool PreProcessKeyDown(ref Message message)
        {
            Keys keyData = (Keys)(int)message.WParam | ModifierKeys;

            if (state == State.Hot)
            {
                int hotItem = this.GetHotItem();

                if (hotItem != -1)
                {
                    if (keyData == Keys.Left)
                    {
                        this.SetHotItem(this.GetPreviousItem(hotItem));
                        return(true);
                    }

                    if (keyData == Keys.Right)
                    {
                        this.SetHotItem(this.GetNextItem(hotItem));
                        return(true);
                    }

                    if ((keyData == Keys.Up) || (keyData == Keys.Down) || (keyData == Keys.Enter))
                    {
                        this.TrackDropDown(hotItem);
                        return(true);
                    }
                }

                if (keyData == Keys.Escape)
                {
                    this.SetState(State.None, -1);
                    return(true);
                }
            }

            bool alt = ((keyData & Keys.Alt) != 0);

            if ((state == State.Hot) || (alt))
            {
                Keys keyCode = keyData & Keys.KeyCode;
                char key     = (char)(int)keyCode;
                if ((Char.IsDigit(key) || (Char.IsLetter(key))))
                {
                    // Process mnemonics.
                    if (this.PreProcessMnemonic(keyCode))
                    {
                        return(true);
                    }

                    if ((state == State.Hot) && (!alt))
                    {
                        NativeMethods.MessageBeep(0);
                        return(true);
                    }
                }
            }

            // return to default state if not handled
            if (state != State.None)
            {
                this.SetState(State.None, -1);
            }

            return(false);
        }