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); }