IMenuCommandService 接口

提供的方法用于管理设计模式下可用的全局设计器谓词和菜单命令,以及显示某些类型的快捷菜单。

**命名空间:**System.ComponentModel.Design
**程序集:**System(在 system.dll 中)

语法

声明
<ComVisibleAttribute(True)> _
Public Interface IMenuCommandService
用法
Dim instance As IMenuCommandService
[ComVisibleAttribute(true)] 
public interface IMenuCommandService
[ComVisibleAttribute(true)] 
public interface class IMenuCommandService
/** @attribute ComVisibleAttribute(true) */ 
public interface IMenuCommandService
ComVisibleAttribute(true) 
public interface IMenuCommandService

备注

此接口提供的方法用于:

  • 查找、调用、添加和移除全局设计器谓词命令。

  • 查找、调用、添加和移除标准菜单命令。

  • 改变与标准菜单命令关联的事件处理程序。

  • 显示与菜单 CommandID 关联的标准命令的快捷菜单。

设计器谓词表示在设计模式下列于快捷菜单中的自定义命令。设计器谓词可以提供指定的文本标签。系统为每个设计器谓词都自动分配一个唯一的 CommandID。设计器可以通过它的 Verbs 属性提供设计器谓词,但这只在设计器组件当前处于选定状态时才可用。全局设计器谓词是无论选定哪个组件,都可从设计模式的快捷菜单访问的设计器谓词命令。此接口使您可管理设计模式下可用的全局设计器谓词集。

您可以使用 AddVerb 方法添加全局设计器谓词,还可以使用 RemoveVerb 方法移除全局设计器谓词。如果知道谓词的 CommandID,则可以使用 GlobalInvoke 方法调用设计器谓词。此接口的 Verbs 属性包含要在快捷菜单中显示的当前设计器谓词命令集。此设计器谓词命令集由所有全局设计器谓词和任何当前选定组件的设计器提供的所有设计器谓词组成。每次选择或取消选择具有提供设计器谓词命令的设计器的组件时,都将更新此谓词集。

菜单命令只能包括预定义的标准命令。大多数预定义的标准命令都是在 StandardCommandsMenuCommands 枚举中定义的。您可以使用此接口的方法添加、移除和调用菜单命令,并且可以搜索已添加到菜单中的菜单命令。

您可以使用 AddCommand 方法添加标准菜单命令,还可以使用 RemoveCommand 方法移除标准菜单命令。您可以按照 AddCommand 方法的文档中详述的过程将事件处理程序附加到预定义的标准菜单命令。还可以使用 FindCommand 方法通过 CommandID 检索已添加到菜单中的菜单命令。也可以使用 GlobalInvoke 方法通过 CommandID 调用菜单命令或设计器谓词命令。

提示

尝试使用已有的 CommandID 添加菜单命令将引发 InvalidOperationException。添加菜单命令时,请务必使用 FindCommand 方法进行检查,确保它还不在菜单上,或者恰当地使用异常处理。

提示

菜单命令可被添加到菜单中,并且可将它的 VisibleEnabled 属性设置为 false。如果在菜单上看不到已添加的菜单命令,那么该命令的这两个属性之一可能被设置为 false

您可以使用 ShowContextMenu 方法在指定位置显示某些包含菜单命令的标准快捷菜单。此方法的文档中有一张表,在其中列出命令 ID,这些命令 ID 指定要显示的有效菜单。

示例

此示例说明如何使用 IMenuCommandService 添加 MenuCommand

<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Public Class CDesigner
    Inherits System.ComponentModel.Design.ComponentDesigner

    Public Overrides Sub Initialize(ByVal comp As IComponent)
        MyBase.Initialize(comp)

        Dim mcs As IMenuCommandService = CType(comp.Site.GetService(GetType(IMenuCommandService)), IMenuCommandService)
        Dim mc As New MenuCommand(New EventHandler(AddressOf OnF1Help), StandardCommands.F1Help)
        mc.Enabled = True
        mc.Visible = True
        mc.Supported = True
        mcs.AddCommand(mc)
        System.Windows.Forms.MessageBox.Show("Initialize() has been invoked.")
    End Sub

    Private Sub OnF1Help(ByVal sender As Object, ByVal e As EventArgs)
        System.Windows.Forms.MessageBox.Show("F1Help has been invoked.")
    End Sub
End Class
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] 
public class CDesigner : System.ComponentModel.Design.ComponentDesigner 
{
    public override void Initialize(IComponent comp) 
    {
        base.Initialize(comp);

        IMenuCommandService mcs = (IMenuCommandService)comp.Site.
                    GetService(typeof(IMenuCommandService));
        MenuCommand mc = new MenuCommand(new EventHandler(OnF1Help), StandardCommands.F1Help);
        mc.Enabled = true;
        mc.Visible = true;
        mc.Supported = true;
        mcs.AddCommand(mc);
        System.Windows.Forms.MessageBox.Show("Initialize() has been invoked.");
    }

    private void OnF1Help(object sender, EventArgs e) 
    {
        System.Windows.Forms.MessageBox.Show("F1Help has been invoked.");
    }
}
   public ref class CDesigner: public ComponentDesigner
   {
   public:
    [PermissionSetAttribute(SecurityAction::Demand, Name="FullTrust")]
      virtual void Initialize( IComponent^ comp ) override
      {
         ComponentDesigner::Initialize( comp );
         IMenuCommandService^ mcs = static_cast<IMenuCommandService^>(comp->Site->GetService( IMenuCommandService::typeid ));
         MenuCommand^ mc = gcnew MenuCommand( gcnew EventHandler( this, &CDesigner::OnF1Help ),StandardCommands::F1Help );
         mc->Enabled = true;
         mc->Visible = true;
         mc->Supported = true;
         mcs->AddCommand( mc );
         System::Windows::Forms::MessageBox::Show( "Initialize() has been invoked." );
      }

   private:
      void OnF1Help( Object^ /*sender*/, EventArgs^ /*e*/ )
      {
         System::Windows::Forms::MessageBox::Show( "F1Help has been invoked." );
      }
   };
}

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

IMenuCommandService 成员
System.ComponentModel.Design 命名空间
MenuCommand
DesignerVerb 类
CommandID 类
MenuCommands
StandardCommands