亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

在C#中使用組件實現office2003風格的菜單

2023-05-10 18:49:23
字體:
來源:轉載
供稿:網友

本文介紹了使用C#開發Office2003風格菜單的方法。

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

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

組件的使用

要正確使用組件,必須先將你的組件加入到工具箱中。然后將該組件從工具箱中拖放放到form窗體中。這時會看到你的form的設計頁中多出了一個名為OfficeMenus1的圖標,說明已經將菜單組件加入到了form中。緊接著調用如下方法:

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

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

// 改變菜單的外觀風格到原始狀態
OfficeMenus1.End();

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

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

可以看出,只須如此幾行代碼就能輕松讓你的菜單實現office2003風格。

組件的實現方法及原理

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

組件實現的第一步是從System.ComponentModel.Component類派生類OfficeMenus。定義如下:

public class OfficeMenus : System.ComponentModel.Component

然后在類中定義兩靜態變量:

//圖像列表用來存儲菜單中用到的圖標
       static ImageList _imageList;
        // 存儲圖片細節的一個名稱集合
       static NameValueCollection picDetails = new NameValueCollection();

NameValueCollection的詳細說明請查閱MSDN,該類主要用來使每個菜單的句柄與每個圖標形成一一對應的關系,以便后面繪制菜單頂的圖標時快速地找到某個菜單所對應的圖標。

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

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

公共接口方法Start的實現原理如下:

public void Start(Form form)
{ 
  //從傳入的父窗體中獲得主菜單
  System.Windows.Forms.MainMenu menu = form.Menu;
  //循環每一個菜單項,為其添加事件處理
  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屬性設置為true
    mi.OwnerDraw = true;
    //使用InitMenuItem(Menu mi)方法對每個MenuItem應用改變
    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.

為每個菜單應用改變的InitMenuItem方法的實現如下:

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

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設置為true
    m.OwnerDraw = true;

    // 通過遞歸調用該方法對所有的子菜單進行相同的設置
    InitMenuItem(m);
   }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av第一页| 国产激情综合五月久久| 国产精品夫妻激情| 中文综合在线观看| 亚洲国产古装精品网站| 91亚洲国产精品| 欧美日韩在线观看视频小说| 2024亚洲男人天堂| 久久久噜噜噜久噜久久| 亚洲图中文字幕| 91高清免费视频| 欧美一级淫片播放口| 91夜夜揉人人捏人人添红杏| 日韩中文在线视频| 国产日韩欧美在线视频观看| 欧美激情图片区| 亚洲一区www| 中文字幕亚洲专区| 亚洲а∨天堂久久精品9966| 成年人精品视频| 九九视频这里只有精品| 国产一区二区三区日韩欧美| 在线视频国产日韩| 欧美亚洲激情视频| 一个人www欧美| 精品国产老师黑色丝袜高跟鞋| 欧美性猛交xxxx黑人| 亚洲人成网7777777国产| 亚洲欧美成人一区二区在线电影| 91精品视频免费观看| www亚洲欧美| 国色天香2019中文字幕在线观看| 伊人青青综合网站| 亚洲电影免费观看高清完整版在线| 国产精品自拍视频| 午夜美女久久久久爽久久| 欧美限制级电影在线观看| 欧美午夜片在线免费观看| 成人久久18免费网站图片| 毛片精品免费在线观看| 亚洲国产欧美一区二区三区同亚洲| 日韩av片免费在线观看| 国产精品久久久久久久久久免费| 精品五月天久久| 亚洲人成电影网站色…| 国产在线播放91| 国产精品视频最多的网站| 欧美在线视频免费播放| 欧美在线精品免播放器视频| 日韩人体视频一二区| 岛国精品视频在线播放| 一区二区三区在线播放欧美| 亚洲毛片在线免费观看| 毛片精品免费在线观看| 久久久精品2019中文字幕神马| 欧美成人手机在线| 狠狠色狠狠色综合日日小说| 欧美成人在线免费视频| 久久乐国产精品| 国产成人高潮免费观看精品| 日韩av最新在线观看| xxxx欧美18另类的高清| 国外成人在线播放| 亚洲综合中文字幕在线观看| 亚洲韩国日本中文字幕| 麻豆成人在线看| 亚洲永久免费观看| 九色成人免费视频| 亚洲欧美一区二区激情| 欧美精品www在线观看| 亚洲精品白浆高清久久久久久| 欧美一级高清免费播放| 亚洲成人精品视频| 精品久久久久久久久久久久| 成人伊人精品色xxxx视频| 国产精品美女免费看| 欧美亚洲国产另类| 91极品女神在线| 久久久亚洲成人| 亚洲欧洲免费视频| 日韩欧美精品中文字幕| 久久久久999| 欧美日韩中文字幕综合视频| 精品国产91久久久久久老师| 国产97人人超碰caoprom| 日韩美女免费线视频| 亚洲第一精品夜夜躁人人躁| 国产欧美一区二区三区视频| 亚洲理论在线a中文字幕| 57pao国产精品一区| 日韩欧美在线免费观看| 日本国产精品视频| 美日韩在线视频| 91丨九色丨国产在线| 日韩欧美国产高清91| 热草久综合在线| 一道本无吗dⅴd在线播放一区| 黑人与娇小精品av专区| 国产在线98福利播放视频| 亚洲国产精品悠悠久久琪琪| 久久艹在线视频| 狠狠躁夜夜躁人人爽天天天天97| 欧美成人激情在线| 中文国产亚洲喷潮| 1769国产精品| 欧美激情一区二区三区久久久| 中文字幕不卡在线视频极品| 91精品国产高清自在线看超| 国产v综合v亚洲欧美久久| 97热精品视频官网| 国产午夜精品视频免费不卡69堂| 最近中文字幕2019免费| 亚洲国产精品热久久| 日韩有码视频在线| 在线观看久久久久久| 久99九色视频在线观看| 中文字幕在线成人| 国产精品91在线| 在线观看日韩视频| 国产欧美一区二区三区久久人妖| 日本免费在线精品| 国产一区二区久久精品| 日韩欧美亚洲一二三区| 国产精品久久久久久久久久久不卡| 欧美激情精品久久久久久免费印度| 亚洲精品色婷婷福利天堂| 久久久久久久久久久久av| 色综合男人天堂| 国产亚洲精品va在线观看| 97香蕉超级碰碰久久免费软件| 日韩精品视频在线| 2024亚洲男人天堂| 亚洲激情视频在线播放| 97香蕉久久超级碰碰高清版| 精品夜色国产国偷在线| 国产精选久久久久久| 成人黄色大片在线免费观看| 一道本无吗dⅴd在线播放一区| 欧美激情视频网| 26uuu久久噜噜噜噜| 亚洲精品黄网在线观看| www.美女亚洲精品| 国产精品9999| 狠狠综合久久av一区二区小说| 91亚洲精品久久久久久久久久久久| 色婷婷综合成人av| 日韩欧美成人网| 91九色视频导航| 国产成人91久久精品| 欧美孕妇毛茸茸xxxx| 91禁外国网站| 日韩成人在线免费观看| 亚洲视频专区在线| 91精品国产色综合| 57pao成人永久免费视频| 久久99精品视频一区97| 在线日韩第一页| 亚洲激情在线观看视频免费| 亚洲精品资源美女情侣酒店| 精品国产一区二区三区在线观看| 亚洲成人激情视频| 日韩激情视频在线| 亚洲视频777| 欧美高清视频免费观看|