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

來源:互聯網
上載者:User

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

 源碼下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.