ポップアップ
ショートカットメニュー
コントロールを右クリックした時に表示される小さなメニューウィンドウのことを
ポップアップメニュー、ショートカットメニュー、または状況依存メニューなどといいます
これを表示するには 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 オブジェクトを設定することでポップアップを表示させています