最近做WinForms项目,用了东日的IrisSkin皮肤组件,有Bug,官方这样说:“
为何"AddContextMenu"方法不能正常的为NotifyIcon组件的ContextMenu换肤?
回答 NotifyIcon的ContextMenu由于有BUG的原因,不能正常的设置OwnerDraw属性。如果需要一个换肤的右键菜单,请不要设置 NotifyIcon的ContextMenu属性,而是在NotifyIcon的鼠标点击事件中手动弹出ContextMenu。”
解决方法如下:
为何"AddContextMenu"方法不能正常的为NotifyIcon组件的ContextMenu换肤?
回答 NotifyIcon的ContextMenu由于有BUG的原因,不能正常的设置OwnerDraw属性。如果需要一个换肤的右键菜单,请不要设置 NotifyIcon的ContextMenu属性,而是在NotifyIcon的鼠标点击事件中手动弹出ContextMenu。”
解决方法如下:
去掉设置NotifyIcon的ContextMenu属性名,
再加一个ContextMenu,在NotifyIcon的MouseDown事件里写:
this .cmuWelcome2.MenuItems.Clear();
this .cmuWelcome2.MenuItems.Add( " 进入(&E) " , new EventHandler( this .menuItemQuerySs_Click));
this .cmuWelcome2.MenuItems.Add( " 管理(&M) " , new EventHandler( this .menuItemManageSs_Click));
MenuItem objMenuItem = new MenuItem();
objMenuItem = new MenuItem();
objMenuItem.Text = " 皮肤(&S) " ;
this .cmuWelcome2.MenuItems.Add( 2 , objMenuItem);
MenuItem objMenuItemA = new MenuItem();
objMenuItemA = this .menuItemVistaRed.CloneMenu();
objMenuItemA.Text = " Vista朱红 " ;
objMenuItem.MenuItems.Add( 0 , objMenuItemA);
MenuItem objMenuItemB = new MenuItem();
objMenuItemB = this .menuItemGlassOrange.CloneMenu();
objMenuItemB.Text = " 玻璃橙 " ;
objMenuItem.MenuItems.Add( 1 , objMenuItemB);
MenuItem objMenuItemC = new MenuItem();
objMenuItemC = this .menuItemXPYellow.CloneMenu();
objMenuItemC.Text = " XP蜡黄 " ;
objMenuItem.MenuItems.Add( 2 , objMenuItemC);
MenuItem objMenuItemD = new MenuItem();
objMenuItemD = this .menuItemWaveGreen.CloneMenu();
objMenuItemD.Text = " 波浪绿 " ;
objMenuItem.MenuItems.Add( 3 , objMenuItemD);
MenuItem objMenuItemE = new MenuItem();
objMenuItemE = this .menuItemDiamondBlue.CloneMenu();
objMenuItemE.Text = " 钻石蓝 " ;
objMenuItem.MenuItems.Add( 4 , objMenuItemE);
MenuItem objMenuItemF = new MenuItem();
objMenuItemF = this .menuItemSteelBlack.CloneMenu();
objMenuItemF.Text = " 钢铁黑 " ;
objMenuItem.MenuItems.Add( 5 , objMenuItemF);
MenuItem objMenuItemH = new MenuItem();
objMenuItemH = this .menuItemEmeraldPurple.CloneMenu();
objMenuItemH.Text = " 翡翠紫 " ;
objMenuItem.MenuItems.Add( 6 , objMenuItemH);
this .cmuWelcome2.MenuItems.Add( " 退出(&E) " , new EventHandler( this .menuItemExitSs_Click));
this .cmuWelcome2.MenuItems.Add( " 帮助(&H) " , new EventHandler( this .menuItemHelpSs_Click));
this .cmuWelcome2.MenuItems.Add( " 关于(&A) " , new EventHandler( this .menuItemAboutSs_Click));
this .notifyIconWelcome.ContextMenu = this .cmuWelcome2;
再加一个ContextMenu,在NotifyIcon的MouseDown事件里写:
this .cmuWelcome2.MenuItems.Clear();
this .cmuWelcome2.MenuItems.Add( " 进入(&E) " , new EventHandler( this .menuItemQuerySs_Click));
this .cmuWelcome2.MenuItems.Add( " 管理(&M) " , new EventHandler( this .menuItemManageSs_Click));
MenuItem objMenuItem = new MenuItem();
objMenuItem = new MenuItem();
objMenuItem.Text = " 皮肤(&S) " ;
this .cmuWelcome2.MenuItems.Add( 2 , objMenuItem);
MenuItem objMenuItemA = new MenuItem();
objMenuItemA = this .menuItemVistaRed.CloneMenu();
objMenuItemA.Text = " Vista朱红 " ;
objMenuItem.MenuItems.Add( 0 , objMenuItemA);
MenuItem objMenuItemB = new MenuItem();
objMenuItemB = this .menuItemGlassOrange.CloneMenu();
objMenuItemB.Text = " 玻璃橙 " ;
objMenuItem.MenuItems.Add( 1 , objMenuItemB);
MenuItem objMenuItemC = new MenuItem();
objMenuItemC = this .menuItemXPYellow.CloneMenu();
objMenuItemC.Text = " XP蜡黄 " ;
objMenuItem.MenuItems.Add( 2 , objMenuItemC);
MenuItem objMenuItemD = new MenuItem();
objMenuItemD = this .menuItemWaveGreen.CloneMenu();
objMenuItemD.Text = " 波浪绿 " ;
objMenuItem.MenuItems.Add( 3 , objMenuItemD);
MenuItem objMenuItemE = new MenuItem();
objMenuItemE = this .menuItemDiamondBlue.CloneMenu();
objMenuItemE.Text = " 钻石蓝 " ;
objMenuItem.MenuItems.Add( 4 , objMenuItemE);
MenuItem objMenuItemF = new MenuItem();
objMenuItemF = this .menuItemSteelBlack.CloneMenu();
objMenuItemF.Text = " 钢铁黑 " ;
objMenuItem.MenuItems.Add( 5 , objMenuItemF);
MenuItem objMenuItemH = new MenuItem();
objMenuItemH = this .menuItemEmeraldPurple.CloneMenu();
objMenuItemH.Text = " 翡翠紫 " ;
objMenuItem.MenuItems.Add( 6 , objMenuItemH);
this .cmuWelcome2.MenuItems.Add( " 退出(&E) " , new EventHandler( this .menuItemExitSs_Click));
this .cmuWelcome2.MenuItems.Add( " 帮助(&H) " , new EventHandler( this .menuItemHelpSs_Click));
this .cmuWelcome2.MenuItems.Add( " 关于(&A) " , new EventHandler( this .menuItemAboutSs_Click));
this .notifyIconWelcome.ContextMenu = this .cmuWelcome2;