// Click handler for all edit menus. Determine the focused window // and framework control, then call a method to take the appropriate // action, based on the type of the control. private void Menu_Click(object sender, System.EventArgs e) { MenuItem miClicked = sender as MenuItem; IntPtr hFocus = Win32API.GetFocus(); Control ctlFocus = Win32API.GetFrameworkControl(hFocus); MenuIndex menuIndex = (MenuIndex)miClicked.Index; if (ctlFocus is TextBoxBase) { DoTextBoxCommand((TextBoxBase)ctlFocus, menuIndex); } else if (ctlFocus is ComboBox && ((ComboBox)ctlFocus).DropDownStyle == ComboBoxStyle.DropDown) { DoComboBoxCommand(hFocus, (ComboBox)ctlFocus, menuIndex); } else { ISupportsEdit ctlEdit = GetISupportsEditControl(ctlFocus); if (ctlEdit != null) { DoISupportsEditCommand(ctlEdit, menuIndex); } } }
// Click handler for all edit menus. Determine the focused window // and framework control, then call a method to take the appropriate // action, based on the type of the control. private void Menu_Click(object sender, System.EventArgs e) { ToolStripMenuItem miClicked = sender as ToolStripMenuItem; IntPtr hFocus = Win32API.GetFocus(); Control ctlFocus = Win32API.GetFrameworkControl(hFocus); MenuIndex menuIndex = (MenuIndex)miClicked.Tag; if (ctlFocus is TextBoxBase) { DoTextBoxCommand((TextBoxBase)ctlFocus, menuIndex); } else if (ctlFocus is ComboBox && ((ComboBox)ctlFocus).DropDownStyle == ComboBoxStyle.DropDown) { DoComboBoxCommand(hFocus, (ComboBox)ctlFocus, menuIndex); } else if (ctlFocus is System.Windows.Forms.DataGridView) { DoDataGridViewCommand((System.Windows.Forms.DataGridView)ctlFocus, menuIndex); } else if (ctlFocus is ICSharpCode.TextEditor.TextArea) { DoICSharpCodeTextEditorCommand(ctlFocus as ICSharpCode.TextEditor.TextArea, menuIndex); } else { ISupportsEdit ctlEdit = GetISupportsEditControl(ctlFocus); if (ctlEdit != null) { DoISupportsEditCommand(ctlEdit, menuIndex); } } }
// When the user clicks on the Edit menu, determine the focused control, // call a method to get state flags, then setup the edit menu based // on the flags. //private void Edit_Popup(object sender, System.EventArgs e) void m_miEdit_DropDownOpening(object sender, EventArgs e) { IntPtr hFocus = Win32API.GetFocus(); Control ctlFocus = Win32API.GetFrameworkControl(hFocus); EditState eEditState = EditState.None; if (ctlFocus is TextBoxBase) { eEditState = GetTextBoxEditState((TextBoxBase)ctlFocus); } else if (ctlFocus is ComboBox && ((ComboBox)ctlFocus).DropDownStyle == ComboBoxStyle.DropDown) { eEditState = GetComboBoxEditState(hFocus, (ComboBox)ctlFocus); } else if (ctlFocus is System.Windows.Forms.DataGridView) { eEditState = GetDataGridViewEditState((System.Windows.Forms.DataGridView)ctlFocus); } else if (ctlFocus is ICSharpCode.TextEditor.TextArea) { eEditState = GetICSharpCodeTextEditor(ctlFocus as ICSharpCode.TextEditor.TextArea); } else { // If this is not a simple control, search up the parent chain for // a custom editable control. ISupportsEdit ctlEdit = GetISupportsEditControl(ctlFocus); if (ctlEdit != null) { eEditState = GetISupportsEditState(ctlEdit); } } //if (GetEditState != null) //{ // eEditState = GetEditState(ctlFocus, EventArgs.Empty); //} // Show or hide and enable or disable menu controls according to eEditState. m_miUndo.Visible = (eEditState & EditState.UndoVisible) != 0; m_miRedo.Visible = (eEditState & EditState.RedoVisible) != 0; m_miDividerRedoCut.Visible = (m_miUndo.Visible == true || m_miRedo.Visible == true); m_miUndo.Enabled = (eEditState & EditState.UndoEnabled) != 0; m_miRedo.Enabled = (eEditState & EditState.RedoEnabled) != 0; m_miCut.Enabled = (eEditState & EditState.CutEnabled) != 0; m_miCopy.Enabled = (eEditState & EditState.CopyEnabled) != 0; m_miPaste.Enabled = (eEditState & EditState.PasteEnabled) != 0; m_miDelete.Enabled = (eEditState & EditState.DeleteEnabled) != 0; m_miSelectAll.Enabled = (eEditState & EditState.SelectAllEnabled) != 0; m_miProperties.Enabled = (eEditState & EditState.PropertiesEnabled) != 0; }
// Set EditState flags for ISupportsEdit controls. private EditState GetISupportsEditState(ISupportsEdit control) { EditState eState = EditState.None; if (control.UndoVisible) { eState |= EditState.UndoVisible; } if (control.CanUndo) { eState |= EditState.UndoEnabled; } if (control.RedoVisible) { eState |= EditState.RedoVisible; } if (control.CanRedo) { eState |= EditState.RedoEnabled; } if (control.CanCut) { eState |= EditState.CutEnabled; } if (control.CanCopy) { eState |= EditState.CopyEnabled; } if (control.CanPaste) { eState |= EditState.PasteEnabled; } if (control.CanSelectAll) { eState |= EditState.SelectAllEnabled; } if (control.CanDelete) { eState |= EditState.DeleteEnabled; } if (control.CanShowProperties) { eState |= EditState.PropertiesEnabled; } return(eState); }
// Perform the command associated with MenuIndex on the specified ISupportsEdit control. private void DoISupportsEditCommand(ISupportsEdit control, MenuIndex menuIndex) { switch (menuIndex) { case MenuIndex.Undo: control.Undo(); break; case MenuIndex.Redo: control.Redo(); break; case MenuIndex.Cut: control.Cut(); break; case MenuIndex.Copy: control.Copy(); break; case MenuIndex.Paste: control.Paste(); break; case MenuIndex.SelectAll: control.SelectAll(); break; case MenuIndex.Delete: control.Delete(); break; case MenuIndex.Properties: control.ShowProperties(); break; } }
// When the user clicks on the Edit menu, determine the focused control, // call a method to get state flags, then setup the edit menu based // on the flags. private void Edit_Popup(object sender, System.EventArgs e) { IntPtr hFocus = Win32API.GetFocus(); Control ctlFocus = Win32API.GetFrameworkControl(hFocus); EditState eEditState = EditState.None; if (ctlFocus is TextBoxBase) { eEditState = GetTextBoxEditState((TextBoxBase)ctlFocus); } else if (ctlFocus is ComboBox && ((ComboBox)ctlFocus).DropDownStyle == ComboBoxStyle.DropDown) { eEditState = GetComboBoxEditState(hFocus, (ComboBox)ctlFocus); } else { // If this is not a simple control, search up the parent chain for // a custom editable control. ISupportsEdit ctlEdit = GetISupportsEditControl(ctlFocus); if (ctlEdit != null) { eEditState = GetISupportsEditState(ctlEdit); } } // Show or hide and enable or disable menu controls according to eEditState. m_miUndo.Visible = (eEditState & EditState.UndoVisible) != 0; m_miRedo.Visible = (eEditState & EditState.RedoVisible) != 0; m_miDividerRedoCut.Visible = (m_miUndo.Visible == true || m_miRedo.Visible == true); m_miUndo.Enabled = (eEditState & EditState.UndoEnabled) != 0; m_miRedo.Enabled = (eEditState & EditState.RedoEnabled) != 0; m_miCut.Enabled = (eEditState & EditState.CutEnabled) != 0; m_miCopy.Enabled = (eEditState & EditState.CopyEnabled) != 0; m_miPaste.Enabled = (eEditState & EditState.PasteEnabled) != 0; m_miDelete.Enabled = (eEditState & EditState.DeleteEnabled) != 0; m_miSelectAll.Enabled = (eEditState & EditState.SelectAllEnabled) != 0; //m_miProperties.Enabled = (eEditState & EditState.PropertiesEnabled) != 0; }