C#遍歷ContextMenuStrip右鍵菜單中包含子菜單的所有菜單並添加事件


  今天寫程序的時候,用到了右鍵菜單控件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);

 源碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM