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++] ContextMenu の Popup イベントのイベント ハンドラを作成する例を次に示します。このイベント ハンドラのコードは、ショートカット メニューを表示しているコントロールが pictureBox1
という名前の PictureBox コントロールと textBox1
という名前の TextBox コントロールのどちらであるかを判断します。どちらのコントロールが ContextMenu のショートカット メニューを表示したかに応じて、適切な MenuItem オブジェクトが ContextMenu に追加されます。この例は、フォーム内で定義されている contextMenu1
という名前の ContextMenu クラスのインスタンスが既にあることを前提にしています。この例は、 TextBox と PictureBox がフォームに追加され、これらのコントロールの 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