Example #1
0
        public bool PreFilterMessage(ref Message m)
        {
            var message = (Utils.ControlExtensions.WindowsMessage)m.Msg;

            if (message == ControlExtensions.WindowsMessage.KEYDOWN)
            {
                switch ((Keys)m.WParam)
                {
                case Keys.Tab:

                    if (Keys.ControlKey.IsPressed())
                    {
                        var selectedForm    = Form.ActiveForm;
                        var selectedControl = selectedForm.GetFocus();

                        keydown = true;

                        if (OnControlTab != null)
                        {
                            CtrlTabEventArgs args;

                            if (selectedControl == null)
                            {
                                args = new CtrlTabEventArgs(ControlExtensions.GetFocus());
                            }
                            else
                            {
                                args = new CtrlTabEventArgs(selectedControl);
                            }

                            OnControlTab(this, args);

                            if (args.CancelOperation)
                            {
                                return(true);
                            }
                            else if (args.SelectedControl != selectedControl)
                            {
                                args.SelectedControl.ActivateOrSetFocus();
                                return(true);
                            }
                        }

                        if (lastCtrlTabFrom == null || lastCtrlTabFrom == selectedControl)
                        {
                            lastCtrlTabFrom = selectedControl;

                            DoControlTab(Keys.ShiftKey.IsPressed());
                        }
                        else if (lastCtrlTabFrom != null)
                        {
                            lastCtrlTabFrom.ActivateOrSetFocus();
                            lastCtrlTabFrom = selectedControl;
                        }

                        return(true);
                    }

                    break;
                }
            }
            else if (message == ControlExtensions.WindowsMessage.KEYUP)
            {
                if (!Keys.ControlKey.IsPressed())
                {
                    if (keydown)
                    {
                        keydown = false;

                        if (PostControlTab != null)
                        {
                            PostControlTab(this, EventArgs.Empty);
                        }
                    }
                }
            }

            return(false);
        }