国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > C# > 正文

在C#中使用組件實(shí)現(xiàn)office2003風(fēng)格的菜單

2023-05-10 18:49:23
字體:
供稿:網(wǎng)友

本文介紹了使用C#開發(fā)Office2003風(fēng)格菜單的方法。

本文用到的組件源碼及測(cè)試程序下載地址

僅僅使用一行簡單的程序,你就能夠使你的Windows窗體的所有菜單和上下文菜單具有office2003的菜單外觀。同樣地,你也可以只用一行程序,就能為你的菜單加上漂亮的圖標(biāo)。本文實(shí)現(xiàn)的是一個(gè)具有該功能的組件。如果你想讓你的菜單恢復(fù)原來的外觀,也只須調(diào)用End方法即可。

組件的使用

要正確使用組件,必須先將你的組件加入到工具箱中。然后將該組件從工具箱中拖放放到form窗體中。這時(shí)會(huì)看到你的form的設(shè)計(jì)頁中多出了一個(gè)名為OfficeMenus1的圖標(biāo),說明已經(jīng)將菜單組件加入到了form中。緊接著調(diào)用如下方法:

//開始顯示office 2003菜單
OfficeMenus1.Start( FormName ); 注:FormName為要改變菜單風(fēng)格的窗口名稱。

同樣,你也可以通過調(diào)用如下方法終止菜單的office2003風(fēng)格,使之回到原始外觀:

// 改變菜單的外觀風(fēng)格到原始狀態(tài)
OfficeMenus1.End();

為菜單頂添加圖標(biāo)也很簡單,只須為工程添加一個(gè)ImageList(圖像列表控件),然后將OfficeMenu組件的ImageList屬性更改為你添加的ImageList,使用如下代碼實(shí)現(xiàn):

// 為菜單添加圖像
// OfficeMenus.AddPicture( MenuItem MenuItemToAddPictureTo, int ImageIndex );
OfficeMenus1.ImageList = imageList1;
OfficeMenus1.AddPicture(menuItem2, 1);

可以看出,只須如此幾行代碼就能輕松讓你的菜單實(shí)現(xiàn)office2003風(fēng)格。

組件的實(shí)現(xiàn)方法及原理

組件由三個(gè)類實(shí)現(xiàn),這三個(gè)類分別為OfficeMenus,MainMenuItemDrawing和MenuItemDrawing,都位于命名空間Dev4Arabs中。由于實(shí)現(xiàn)代碼較長,所以在此只給出了組件實(shí)現(xiàn)的思路。

組件實(shí)現(xiàn)的第一步是從System.ComponentModel.Component類派生類OfficeMenus。定義如下:

public class OfficeMenus : System.ComponentModel.Component

然后在類中定義兩靜態(tài)變量:

//圖像列表用來存儲(chǔ)菜單中用到的圖標(biāo)
       static ImageList _imageList;
        // 存儲(chǔ)圖片細(xì)節(jié)的一個(gè)名稱集合
       static NameValueCollection picDetails = new NameValueCollection();

NameValueCollection的詳細(xì)說明請(qǐng)查閱MSDN,該類主要用來使每個(gè)菜單的句柄與每個(gè)圖標(biāo)形成一一對(duì)應(yīng)的關(guān)系,以便后面繪制菜單頂?shù)膱D標(biāo)時(shí)快速地找到某個(gè)菜單所對(duì)應(yīng)的圖標(biāo)。

接下來定義公共接口方法start和End。

Start方法有一個(gè)Form類類型的參數(shù),該方法從傳入的參數(shù)中獲得該窗口的主菜單。接下來為每一個(gè)主菜單下的MenuItem添加MeasureItem事件處理mainMenuItem_MeasureItem和DrawItem事件處理mainMenuItem_DrawItem,將MenuItem的OwnerDraw屬性設(shè)置為true,并使用InitMenuItem(Menu mi)方法對(duì)每個(gè)MenuItem應(yīng)用改變。然后再從form參數(shù)中獲取該窗口的上下文菜單對(duì)象,對(duì)其調(diào)用InitMenuItem(Menu mi)應(yīng)用改變。最后循環(huán)查找窗口中包含的每個(gè)子控件的上下文菜單,對(duì)其應(yīng)用改變。

公共接口方法Start的實(shí)現(xiàn)原理如下:

public void Start(Form form)
{ 
  //從傳入的父窗體中獲得主菜單
  System.Windows.Forms.MainMenu menu = form.Menu;
  //循環(huán)每一個(gè)菜單項(xiàng),為其添加事件處理
  foreach ( MenuItem mi in menu.MenuItems )
  {
    //訂閱MesaureItem事件處理
    mi.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(mainMenuItem_MeasureItem);
    //訂閱DrawItem事件處理
    mi.DrawItem += new System.Windows.Forms.DrawItemEventHandler(mainMenuItem_DrawItem);
    //將OwnerDraw屬性設(shè)置為true
    mi.OwnerDraw = true;
    //使用InitMenuItem(Menu mi)方法對(duì)每個(gè)MenuItem應(yīng)用改變
    InitMenuItem(mi);
  }
  ContextMenu cmenu = form.ContextMenu;
  if ( cmenu != null ) {InitMenuItem(cmenu);}
  foreach ( Control c in form.Controls ) {
    if ( c.ContextMenu != null )
      InitMenuItem(c.ContextMenu);}
  catch {}
}

End方法與這類似,只須將InitMenuItem換為UninitMenuItem.

為每個(gè)菜單應(yīng)用改變的InitMenuItem方法的實(shí)現(xiàn)如下:

循環(huán)查找mi中的每個(gè)MenuItem,為其添加MeasureItem事件處理menuItem_MeasureItem和DrawItem事件處理menuItem_DrawItem(注意,此處的事件處理方法名稱與Start中對(duì)主菜單的事件處理方法名稱不同),并將OwnerDraw屬性設(shè)置為true。使用遞歸調(diào)用對(duì)每個(gè)查找到的MenuItem調(diào)用InitMenuItem方法,這樣便可以對(duì)菜單項(xiàng)下的所有級(jí)別的子菜單項(xiàng)都應(yīng)用到改變。

private void InitMenuItem(Menu mi)
{
   foreach ( MenuItem m in mi.MenuItems )
   {
    // 訂閱MesaureItem事件處理
    m.MeasureItem +=
     new System.Windows.Forms.MeasureItemEventHandler(this.menuItem_MeasureItem);
    // 訂閱DrawItem事件處理
    m.DrawItem +=
     new System.Windows.Forms.DrawItemEventHandler(this.menuItem_DrawItem);
    // 將OwnerDraw設(shè)置為true
    m.OwnerDraw = true;

    // 通過遞歸調(diào)用該方法對(duì)所有的子菜單進(jìn)行相同的設(shè)置
    InitMenuItem(m);
   }
}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产黄色片在线观看| 丁香花视频在线观看| 亚洲精品aaaa精品| 亚洲欧美自拍另类| 中文乱码字幕av网站| 国产视频三级在线观看播放| 午夜伦全在线观看| www.操.com| www.色五月| 国产中文在线| 国产亚洲精品久久久久久青梅 | 国产小视频在线高清播放| 丁香婷婷在线| 国产丝袜在线| 在线观看wwww| 天堂网中文在线| 国产男女无套在线播放| 国产福利电影在线观看| 中文日本在线观看| 天堂在线一二区| av在线免费播放网站| 天堂中文字幕在线| www久久日com| 2020亚洲男人天堂| www.三区| 一本大道香蕉8中文在线视频| 青青草原国产在线观看| 国产极品视频| 尤物在线网址| www.91在线播放| 中文字幕日本三级| 伊人狠狠av| 国产桃色电影在线播放| 欧美婷婷久久五月精品三区| 18成年在线观看| 丁香六月婷婷| 好吊日视频在线观看| 99久久精品免费观看国产| 中文字幕人成高视频| 欧美国产中文| www.99av| 免费影视观看网站入口| 日本欧美在线视频免费观看| 国产黄色av免费看| 尤物视频免费在线观看| 亚洲wwwwww| 精品一区二区在线欧美| 国产精品久久麻豆| 国产无遮挡在线视频免费观看| 美女永久在线网站| 男人天堂v视频| 欧美国产中文| 国产女王在线**视频 | 国产传媒在线播放| 亚洲精品国自产拍在线观看| 天天av天天爱| 国产美女在线播放| 青青草视频在线免费观看| 亚洲精品视频区| 四虎影院成人| 久久精品最新免费国产成人| 白浆爆出在线观看| 欧美日韩一区二区三区视视频| 国产在线激情视频| 国产美女极品在线| 九九精品九九| 2021av在线| 开心丁香婷婷深爱五月| 久久久久久五月天久久久久久久久| jlzzjlzz欧美| www.毛片| 午夜视频在线| 影音先锋日韩| 欧美人成在线观看网站高清| 国产在线观看色| 国产成人福利| wwwww在线观看免费视频| 国产卡一卡二卡三| 中文av在线播放| 热99re久久精品精品免费| 超碰免费在线播放| 国产成人夜间影院在线观看| 天天干天天操天天爽| 懂色av中文在线| 999国产在线视频| 亚洲国产aⅴ精品| 九九在线视频| 91精选福利| 国产精品一二三区视频| 天天干天天摸| 99re热视频在线| 国产精品臀控福利在线观看| 一区二区精品区| 国产女人在线观看| 亚洲日本伊人| 国产91久久久久蜜臀青青天草二| 国产在线超碰| av大片在线播放| 国产福利小视频在线| 国产区视频在线播放| 国产在线高清理伦片a| 伊人狠狠av| 人成在线免费视频| 国产极品一区二区三区| 国产丝袜视频在线播放| 五月伊人六月| 午夜小视频在线| 国产精品入口麻豆免费看| 九色成人在线| av在线播放国产| 69视频在线| 亚洲欧美日韩综合精品网| 国产精品入口麻豆免费看| 国产69精品久久久久孕妇国产69久久 | 国产精品不卡一区二区三区在线观看| 免费a级人成a大片在线观看| 欧美人成在线观看网站高清| 日本高清不卡中文字幕| 永久免费av网站| 中文视频在线| 亚洲va国产日韩欧美精品色婷婷| 1区不卡电影| 国产精品视频一区二区久久| 国产三区视频在线观看| 国产羞羞视频| 国产二区视频| av网站在线播放| 欧美日韩在线中文字幕| 尤物网址在线观看| 国产精品不卡一区二区三区在线观看| 国产网站免费观看| 国产精品人人| 精品全国在线一区二区| 国产不卡在线| 亚洲国产日韩成人综合天堂| 欧美性猛交xxxx免费看蜜桃| 亚洲精品影视在线| 国产中文在线视频| 国产a国产a国产a| 超碰免费在线| 中文字幕麻豆| 亚洲精品在线视频免费| 中文字幕国产欧美| 欧美高清xxxx性| 69视频在线| 国产农村一级特黄α**毛片| 在线免费国产| 18 激情视频在线| 国产精品麻豆一区二区三区 | 国产素人视频在线观看| 亚洲网站视频在线观看| 最近中文字幕大全中文字幕免费| 91高清国产| 国产视频三级在线观看播放| 欧美日韩亚洲国内综合网| 永久免费av片在线观看全网站| 国产日本韩国在线播放| 国产美女视频一区二区二三区| 麻豆福利在线观看| 四虎在线免费视频| 中文产幕区在线观看| 91欧美在线视频| 国产高清在线观看| 国产在线日本| 九九热视频在线| 在线视频观看亚洲| 精品麻豆国产| 一区二区三区免费视频网站| 国产羞羞视频在线观看| baoyu777.永久免费视频| 国产小视频在线播放| 国产一级片在线播放| 88av在线| 黄色毛片在线观看| 国产在线麻豆精品| 国产精品久久久久久福利| 中文字幕在线资源| 国产日本韩国在线播放| 精品欧美不卡一区二区在线观看 | 欧美精品久久久久久久小说| 国产在线观看a| 国产高清在线| 免费久久网站| 91激情在线| 久久精品免视着国产成人| 天天av综合网| 亚洲国产aⅴ精品| 国产综合视频一区二区三区免费| 亚洲а∨精品天堂在线| 黄网址在线播放免费| 国产免费黄色| 69视频在线观看| 天堂√中文在线| 最近中文字幕av免费高清| 精品视频麻豆入口| 国产专区在线播放| 五月亚洲综合| 一本大道香蕉8中文在线视频| 四虎网站在线观看| 青青青国产视频|