ContextMenu 类

表示快捷菜单。虽然 ContextMenuStrip 取代了以前版本的 ContextMenu 控件并向其中添加了功能,但是也可以选择保留 ContextMenu 控件以备向后兼容和将来使用。

**命名空间:**System.Windows.Forms
**程序集:**System.Windows.Forms(在 system.windows.forms.dll 中)

语法

声明
Public Class ContextMenu
    Inherits Menu
用法
Dim instance As ContextMenu
public class ContextMenu : Menu
public ref class ContextMenu : public Menu
public class ContextMenu extends Menu
public class ContextMenu extends Menu

备注

ContextMenu 类表示当用户在控件或窗体的特定区域上单击鼠标右键时会显示的快捷菜单。快捷菜单通常用于组合来自窗体的一个 MainMenu 的不同菜单项,便于用户在给定应用程序上下文中使用。例如,可以使用分配给 TextBox 控件的快捷菜单提供菜单项,以便更改文本字体,在控件中查找文本或实现复制和粘贴文本的剪贴版功能。还可以在快捷菜单中显示不位于 MainMenu 中的新的 MenuItem 对象,这些对象提供与特定情况有关而不适合在 MainMenu 中显示的命令。

当用户在控件或窗体本身上单击鼠标右键时,通常会显示快捷菜单。可视控件和 FormContextMenu 属性,该属性可将 ContextMenu 类绑定到显示快捷菜单的控件。多个控件可使用一个 ContextMenu。可使用 SourceControl 属性确定上次显示快捷菜单的控件,以执行特定于该控件的任务或修改该控件所显示的快捷菜单。

您可能希望知道何时显示快捷菜单,以便在向用户显示菜单之前设置选中标记、禁用项和执行其他菜单任务。可处理 Popup 事件来确定显示快捷菜单的时间。

提示

为了重用 MainMenu 中显示的、用于 ContextMenuMenuItem 对象,必须使用 MenuItem 类的 CloneMenu 方法创建该菜单的副本。还可以使用 MenuItem 类的 MergeMenu 方法将菜单项及其子菜单项合并到一个 MenuItem 对象中。

Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 平台说明: 在 Pocket PC 上,请避免在辅助窗体上使用快捷菜单,因为在销毁其父窗体后,它们仍会显示。

示例

下面的代码示例为 ContextMenuPopup 事件创建事件处理程序。事件处理程序中的代码决定以下两个控件中哪一个是显示快捷菜单的控件:名为 pictureBox1PictureBox 和名为 textBox1TextBox。根据哪个控件导致 ContextMenu 显示其快捷菜单,控件向 ContextMenu 添加相应的 MenuItem 对象。此示例要求窗体内定义了一个名为 contextMenu1ContextMenu 类的实例。此示例还要求向窗体添加 TextBoxPictureBox,而且这些控件的 ContextMenu 属性均设置为 contextMenu1

Private Sub MyPopupEventHandler(sender As System.Object, e As System.EventArgs)
    ' Define the MenuItem objects to display for the TextBox.
    Dim menuItem1 As New MenuItem("&Copy")
    Dim menuItem2 As New MenuItem("&Find and Replace")
    ' Define the MenuItem object to display for the PictureBox.
    Dim menuItem3 As New MenuItem("C&hange Picture")
    
    ' Clear all previously added MenuItems.
    contextMenu1.MenuItems.Clear()
    
    If contextMenu1.SourceControl Is textBox1 Then
        ' Add MenuItems to display for the TextBox.
        contextMenu1.MenuItems.Add(menuItem1)
        contextMenu1.MenuItems.Add(menuItem2)
    ElseIf contextMenu1.SourceControl Is pictureBox1 Then
        ' Add the MenuItem to display for the PictureBox.
        contextMenu1.MenuItems.Add(menuItem3)
    End If
End Sub 'MyPopupEventHandler '
private void MyPopupEventHandler(System.Object sender, System.EventArgs e)
 {
    // Define the MenuItem objects to display for the TextBox.
    MenuItem menuItem1 = new MenuItem("&Copy");
    MenuItem menuItem2 = new MenuItem("&Find and Replace");
    // Define the MenuItem object to display for the PictureBox.
    MenuItem menuItem3 = new MenuItem("C&hange Picture");

    // Clear all previously added MenuItems.
    contextMenu1.MenuItems.Clear();
 
    if(contextMenu1.SourceControl == textBox1)
    {
       // Add MenuItems to display for the TextBox.
       contextMenu1.MenuItems.Add(menuItem1);
       contextMenu1.MenuItems.Add(menuItem2);
    }
    else if(contextMenu1.SourceControl == pictureBox1)
    {
       // Add the MenuItem to display for the PictureBox.
       contextMenu1.MenuItems.Add(menuItem3);
    }
 }
private:
   void MyPopupEventHandler( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      // Define the MenuItem objects to display for the TextBox.
      MenuItem^ menuItem1 = gcnew MenuItem( "&Copy" );
      MenuItem^ menuItem2 = gcnew MenuItem( "&Find and Replace" );
      // Define the MenuItem object to display for the PictureBox.
      MenuItem^ menuItem3 = gcnew MenuItem( "C&hange Picture" );
      
      // Clear all previously added MenuItems.
      contextMenu1->MenuItems->Clear();

      if ( contextMenu1->SourceControl == textBox1 )
      {
         
         // Add MenuItems to display for the TextBox.
         contextMenu1->MenuItems->Add( menuItem1 );
         contextMenu1->MenuItems->Add( menuItem2 );
      }
      else if ( contextMenu1->SourceControl == pictureBox1 )
      {
         // Add the MenuItem to display for the PictureBox.
         contextMenu1->MenuItems->Add( menuItem3 );
      }
   }
private void MyPopupEventHandler(Object sender, EventArgs e)
{
    // Define the MenuItem objects to display for the TextBox.
    MenuItem menuItem1 = new MenuItem("&Copy");
    MenuItem menuItem2 = new MenuItem("&Find and Replace");

    // Define the MenuItem object to display for the PictureBox.
    MenuItem menuItem3 = new MenuItem("C&hange Picture");

    // Clear all previously added MenuItems.
    contextMenu1.get_MenuItems().Clear();
    if (contextMenu1.get_SourceControl().Equals(textBox1)) {
        // Add MenuItems to display for the TextBox.
        contextMenu1.get_MenuItems().Add(menuItem1);
        contextMenu1.get_MenuItems().Add(menuItem2);
    }
    else {
        if (contextMenu1.get_SourceControl().Equals(pictureBox1)) {
            // Add the MenuItem to display for the PictureBox.
            contextMenu1.get_MenuItems().Add(menuItem3);
        }
    }
} //MyPopupEventHandler

继承层次结构

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.Windows.Forms.Menu
        System.Windows.Forms.ContextMenu

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、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

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

ContextMenu 成员
System.Windows.Forms 命名空间
Menu
MenuItem
MainMenu