[C#] 
protected 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);
    }
 }

解决方案 »

  1.   

    ContextMenu 类表示当用户在控件或窗体的特定区域上单击鼠标右键时会显示的快捷菜单。快捷菜单通常用于组合来自窗体的一个 MainMenu 的不同菜单项,便于用户在给定应用程序上下文中使用。例如,可以使用分配给 TextBox 控件的快捷菜单提供菜单项,以便更改文本字体,在控件中查找文本或实现复制和粘贴文本的剪贴版功能。还可以在快捷菜单中显示不位于 MainMenu 中的新的 MenuItem 对象,这些对象提供与特定情况有关而不适合在 MainMenu 中显示的命令。当用户在控件或窗体本身上单击鼠标右键时,通常会显示快捷菜单。可视控件和 Form 有 ContextMenu 属性,该属性可将 ContextMenu 类绑定到显示快捷菜单的控件。多个控件可使用一个 ContextMenu。可使用 SourceControl 属性确定上次显示快捷菜单的控件,以执行特定于该控件的任务或修改该控件所显示的快捷菜单。您可能希望知道何时显示快捷菜单,以便在向用户显示菜单之前设置选中标记、禁用项和执行其他菜单任务。可处理 Popup 事件来确定显示快捷菜单的时间。注意   为了重用 MainMenu 中显示的、用于 ContextMenu 的 MenuItem 对象,必须使用 MenuItem 类的 CloneMenu 方法创建该菜单的副本。还可以使用 MenuItem 类的 MergeMenu 方法将菜单项及其子菜单项合并到一个 MenuItem 对象中。
      

  2.   

    ContextMenu cm1=new ContextMenu(new MenuItem[]{miCut,miCopy});如果菜单已存在的话,尽量使用CloneMenu创建一个副本作快捷菜单.