今天寫程式的時候,用到了右鍵菜單控制項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);
源碼下載