ポップアップ


ショートカットメニュー

コントロールを右クリックした時に表示される小さなメニューウィンドウのことを
ポップアップメニュー、ショートカットメニュー、または状況依存メニューなどといいます

これを表示するには System.Windows.Forms.ContextMenu を使います
このクラスもまた Menu クラスを継承した重要なクラスのひとつです
System.Object
   System.MarshalByRefObject
      System.ComponentModel.Component
         System.Windows.Forms.Menu
            System.Windows.Forms.ContextMenu

public class ContextMenu : Menu
このクラスのコンストラクタは、次のようなものが定義されています

public ContextMenu();
public ContextMenu(MenuItem[] menuItems);

menuItem には、ポップアップに追加するメニュー項目の配列を指定します
基本的に、このクラスは Menu から大きな変化はありません
これまでのように、MenuIetmCollection.Add() を使って項目を制御できます

ポップアップを表示するには ContextMenu.Show() メソッドを使います

public void Show(Control control , Point pos);

control には、表示するポップアップに関連付けるコントロールを
pos にはポップアップを表示する位置を示す Point を指定します
この座標は、関連付けられたコントロールのクライアント座標として扱われます
using System.Windows.Forms;
using System.Drawing;

class WinMain : Form {
	ContextMenu cm;
	public static void Main(string[] args) {
		Application.Run(new WinMain());
	}

	override protected void OnMouseUp(MouseEventArgs e) {
		if (e.Button != MouseButtons.Right) return;
		cm.Show(this , new Point(e.X , e.Y));
	}

	public WinMain() {
		MenuItem[] mi = {
			new MenuItem("Maiden☆Breeder") ,
			new MenuItem("Magical nyan nyan TARUTO") ,
			new MenuItem("Tokyo mew mew") ,
			new MenuItem("Kitty on your lap")
		};
		cm = new ContextMenu(mi);
	}
}


このプログラムは、クライアント領域を右クリックすると
図のように設定したポップアップメニューが表示されるというものです

このプログラムは OnMouseUp() メソッドをオーバーライドしてポップアップを表示しました
しかし、実は Contoro.ContextMenu プロパティに ContextMenu を設定すれば
これらの処理を自動化してくれます

public virtual ContextMenu ContextMenu {get; set;}

ポップアップメニューに一般的な挙動を求めるのであれば、これで十分でしょう
using System.Windows.Forms;

class WinMain : Form {
	ContextMenu cm;
	public static void Main(string[] args) {
		Application.Run(new WinMain());
	}

	public WinMain() {
		MenuItem[] mi = {
			new MenuItem("Maiden☆Breeder") ,
			new MenuItem("Magical nyan nyan TARUTO") ,
			new MenuItem("Tokyo mew mew") ,
			new MenuItem("Kitty on your lap")
		};
		cm = new ContextMenu(mi);
		ContextMenu = cm;
	}
}
このプログラムは、先ほどのプログラムとまったく同じ結果になりますが
イベントはオーバーライドで処理しているのではなく、Control.ContextMenu に
ContextMenu オブジェクトを設定することでポップアップを表示させています



前のページへ戻る次のページへ