今天寫程序的時候,用到了右鍵菜單控件ContextMenuStrip,真的很方便,寫了幾個菜單與子菜單項,本來是可以用雙擊來給每一個菜單添加事件的,不過,這樣做似乎非常麻煩,而且對一些子菜單也不容易控制,於是想用遍歷ContextMenuStrip的方法來分別給各個子菜單添加事件,可是百度了一下,發現這方面的資料居然很少,自己研究了以后,成功編寫了這個功能,現在逍遙一生把代碼貼出來,雖然很簡單,但也希望后面的人少走些不必要的彎路,之所以說是彎路,是因為其實技術上沒什么東西,就是一個foreach,只不過對象資料比較少罷了。廢話少說,開工。 1、首先還是老一套,創建一個windows窗體應用程序項目,名字不重要呵呵,這里我取名為http://www.xiaoyaolife.com/ 2、在窗體中添加兩個PictureBox控件,一個是PictureBox1,一個是PictureBox2,分別顯示兩張區別的圖片。兩從工具欄中拖一個contextMenuStrip控件來,取名xiaoyaolife_menu,並且添加幾個菜單,分別選中兩個picturebox,找到屬性contextMenuStrip並在下拉列表中選擇剛才我們添加的右鍵菜單控件xiaoyaolife_menu。

3、下面的代碼顯示了怎么給各個右鍵菜單項一次性添加自定義事件。
void AddMenuEvents(ContextMenuStrip m)
{
//遍歷菜單中所有的項
//這里可以添加菜單比如:
// m.Items.Add("刪除");
// m.Items.Add("更新");
foreach (ToolStripItem items in m.Items)
{
//這里可以按某個菜單下面再添加子菜單,代碼如下
//if (items.Text == "刪除")
// {
// ToolStripItem ts_1 = new ToolStripMenuItem("正常");
// ((ToolStripDropDownItem)(items)).DropDownItems.Add(ts_1);
// }
//如果是菜單項,之所以這樣判斷是因為右鍵菜單中還可以添加其它東西
if (items is ToolStripMenuItem)
{
ChildMenu((ToolStripMenuItem)items);
}
}
}
void ChildMenu(ToolStripMenuItem menu)
{
if (menu.HasDropDownItems)
{
//如果有子菜單
foreach (ToolStripMenuItem m in menu.DropDownItems)
{
ChildMenu(m);
}
}
else
{
//如果沒有子菜單就直接添加自定義事件 xiaoyaolife_event
menu.Click += new EventHandler(xiaoyaolife_event);
}
}
4、下面是自定義事件 xiaoyaolife_event 的代碼:
void xiaoyaolife_event(object sender, EventArgs e)
{
ToolStripMenuItem ts = (sender as ToolStripMenuItem);
//獲取子菜單的上一級菜單 string oweraitem=ts.OwnerItem.Text;
string thecmdstr = ts.Text;
switch (thecmdstr)
{
case "我是誰":
MessageBox.Show(thecmdstr);
break;
case "網站域名":
MessageBox.Show("http://www.xiaoyaolife.com/");
break;
case "網站名稱":
MessageBox.Show("逍遙一生");
break;
default:
break;
}
}
5、在Form_Load中添加:
private void Form1_Load(object sender, EventArgs e)
{
AddMenuEvents(xiaoyaolife_menu);
}
6、OK了,可以調試了。
點擊“顯示個文字”——“網站域名”后:

其它相關內容請點擊:
1、要想知道用戶點擊了哪個控件,請點擊下面的鏈接
c#判斷右鍵菜單(ContextMenuStrip)是從哪個控件彈出來的方法
效果圖:

2、ContextMenuStrip子菜單中的相似菜單怎么只讓一個菜單是選中的狀態。
效果圖:

給固定菜單添加子菜單
ToolStripItem ts_1 = new ToolStripMenuItem("正常");
ts_1.Click+=new EventHandler(ts_1_Click);
只能通過ContextMenuStrip的Item的索引為其添加子菜單,通過Item的Text屬性會報錯*/
((ToolStripDropDownItem)(contextMenuStrip1.Items[1])).DropDownItems.Add(ts_1);
ToolStripItem ts_2 = new ToolStripMenuItem("維修");
ts_2.Click+=new EventHandler(ts_2_Click);
((ToolStripDropDownItem)(contextMenuStrip1.Items[1])).DropDownItems.Add(ts_2);
ToolStripItem ts_3 = new ToolStripMenuItem("建設中");
ts_3.Click+=new EventHandler(ts_3_Click);
((ToolStripDropDownItem)(contextMenuStrip1.Items[1])).DropDownItems.Add(ts_3);
