次の方法で共有


ContextMenu クラス

ショートカット メニューを表します。

この型のすべてのメンバの一覧については、ContextMenu メンバ を参照してください。

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

Public Class ContextMenu
   Inherits Menu
[C#]
public class ContextMenu : Menu
[C++]
public __gc class ContextMenu : public Menu
[JScript]
public class ContextMenu extends Menu

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

ContextMenu クラスは、ユーザーがコントロールまたはフォームの領域の上で、右クリックすると表示されるショートカット メニューを表します。通常、ショートカット メニューはフォームの MainMenu のさまざまなメニュー項目を組み合わせるために使用されます。ショートカット メニューは、アプリケーションのコンテキストが指定されるためユーザーにとっては使いやすくなります。たとえば、 TextBox に割り当てられたショートカット メニューを使用すると、テキストのフォントを変更したり、コントロール内のテキストを検索するためのメニュー項目、またはテキストをコピーして貼り付けるクリップボード機能を使用できます。また、 MainMenu 内にない新しい MenuItem オブジェクトをショートカット メニューに表示して、 MainMenu では表示されない、状況に合ったコマンドを使用することもできます。

通常、ショートカット メニューは、ユーザーがコントロールまたはフォーム自体の上で右ボタンをクリックすると表示されます。表示されているコントロールおよび Form は、ショートカット メニューを表示するコントロールに ContextMenu クラスをバインドする ContextMenu プロパティを持っています。 ContextMenu は複数のコントロールで使用できます。 SourceControl プロパティを使用すると、コントロールに固有のタスクの実行、またはコントロールに表示されるショートカット メニューの変更のために、どのコントロールで最後にショートカット メニューが表示されたかを確認できます。

メニューが表示される前に、チェック マークの設定、項目の無効化、および他のメニュー タスクの実行のために、いつショートカット メニューを表示していたかを知ることができます。 Popup イベントを処理すると、いつショートカット メニューが表示されていたかを確認できます。

メモ    MainMenu で表示されている MenuItem オブジェクトを再利用して、 ContextMenu で使用するには、 MenuItem クラスの CloneMenu メソッドを使用してメニューのコピーを作成する必要があります。 MenuItem クラスの MergeMenu メソッドを使用すると、メニュー項目とそのサブメニュー項目を 1 つの MenuItem オブジェクトにマージすることもできます。

.NET Compact Framework - Windows CE .NET プラットフォームに関する注意点: Pocket PC では、子フォームでのショートカット メニューの使用を避けてください。その親フォームを破棄した後でも表示されたままとなるためです。

使用例

[Visual Basic, C#, C++] ContextMenuPopup イベントのイベント ハンドラを作成する例を次に示します。このイベント ハンドラのコードは、ショートカット メニューを表示しているコントロールが pictureBox1 という名前の PictureBox コントロールと textBox1 という名前の TextBox コントロールのどちらであるかを判断します。どちらのコントロールが ContextMenu のショートカット メニューを表示したかに応じて、適切な MenuItem オブジェクトが ContextMenu に追加されます。この例は、フォーム内で定義されている contextMenu1 という名前の ContextMenu クラスのインスタンスが既にあることを前提にしています。この例は、 TextBoxPictureBox がフォームに追加され、これらのコントロールの ContextMenu プロパティが contextMenu1 に設定されていることも前提にしています。

 
Protected 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 '

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

[C++] 
protected:
void MyPopupEventHandler(System::Object* /*sender*/, System::EventArgs* /*e*/)
 {
    // Define the MenuItem objects to display for the TextBox.
    MenuItem* menuItem1 = new MenuItem(S"&Copy");
    MenuItem* menuItem2 = new MenuItem(S"&Find and Replace");
    // Define the MenuItem object to display for the PictureBox.
    MenuItem* menuItem3 = new MenuItem(S"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);
    }
 }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Windows.Forms

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Windows.Forms (System.Windows.Forms.dll 内)

参照

ContextMenu メンバ | System.Windows.Forms 名前空間 | Menu | MenuItem | MainMenu