您的位置:程序门 -> .net技术 -> c#



谁有最优化的动态菜单程序?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


谁有最优化的动态菜单程序?
发表于:2007-01-30 17:04:11 楼主
如题所述,我们经常用到动态菜单,不过或多或少都遇到一些问题和缺陷,谁有比较解决比较完善的代码或思路,可以贴上来让大家学习学习!
谢谢支持!
发表于:2007-02-05 10:03:471楼 得分:0
??
发表于:2007-02-05 12:58:132楼 得分:0
public   contextmenustrip   mainmenu   =   null;
public   void   createmainmenu(ilist   menuitems)
{
if   (mainmenu   ==   null)
{
mainmenu   =   new   contextmenustrip();
foreach   (object   item   in   menuitems)
{
toolstripmenuitem   mi   =   null;

mi   =   new   toolstripmenuitem((string)getvalue(item,   "caption "));
mi.name   =   getvalue(item,   "id ").tostring();
//mi.shortcutkeys   =   (keys)item[ "shortcut "];
mi.tag   =   item;
mi.click   +=   new   eventhandler(menuclick);
string   iconfile   =   (string)getvalue(item,   "icon ");
if   (system.io.file.exists(iconfile))
{
mi.image   =   image.fromfile(iconfile);
}
guid   fatherid   =   (guid)getvalue(item,   "fatherid ");
bool   separater   =   (bool)getvalue(item,   "separater ");
if   (fatherid   ==   guid.empty)
{
if   (separater)
mainmenu.items.add( "- ");
mainmenu.items.add(mi);
}
else
addchildmenu(fatherid.tostring(),   mi,   mainmenu.items,   separater);
}
}
mainmenu.items.add( "- ");
                        assembly   a   =   assembly.getEXECutingassembly();
                        system.drawing.image   img   =   image.fromstream(a.getmanifestresourcestream(a.getname().name   +   ".images.help.ico "));
                        mainmenu.items.add( "帮助与支持 ",   img,   menuhelp);
                        if   (applicationdeployment.isnetworkdeployed)
                                mainmenu.items.add( "检查更新 ",   null,   menucheckupdate);
mainmenu.items.add( "关于... ",   null,   menuabout);
mainmenu.items.add( "- ");
                        m_minmenu   =   new   toolstripmenuitem( "最小化 ",   null,   menumin);
                        mainmenu.items.add(m_minmenu);
                        if   (mainform.windowstate   ==   formwindowstate.normal)
                                m_maxmenu   =   new   toolstripmenuitem( "最大化 ",   null,   menumax);
                        else
                                m_maxmenu   =   new   toolstripmenuitem( "还原 ",   null,   menumax);
                        mainmenu.items.add(m_maxmenu);
                        mainmenu.items.add( "- ");
mainmenu.items.add( "退出系统 ",   null,   menuexit);
mainmenu.show(1500,   1500);
}
private   object   getvalue(object   obj,   string   propertyname)
{
system.reflection.propertyinfo   pi   =   obj.gettype().getproperty(propertyname);
if   (null   !=   pi)
return   pi.getvalue(obj,   null);
return   null;
}
private   bool   addchildmenu(string   key,   toolstripmenuitem   item,   toolstripitemcollection   items,   bool   hasseparator)
{
if   (items   ==   null)
return   false;
toolstripmenuitem   pmi   =   items[key]   as   toolstripmenuitem;

if   (pmi   ==   null)
{
foreach   (toolstripitem   mi   in   items)
{
if   (mi   is   toolstripseparator)   continue;           //   skip   the   separator   line
if   ((pmi   =   ((mi   as   toolstripmenuitem).dropdownitems[key]   as   toolstripmenuitem))   !=   null)
break;
}
}
if   (pmi   !=   null)
{
if   (hasseparator)
pmi.dropdownitems.add( "- ");
pmi.dropdownitems.add(item);
pmi.click   -=   new   eventhandler(menuclick);
return   true;
}
else
foreach   (toolstripitem   mi   in   items)
{
if   (mi   is   toolstripseparator)   continue;           //   skip   the   separator   line
if   (addchildmenu(key,   item,   (mi   as   toolstripmenuitem).dropdownitems,   hasseparator))
return   true;
}
return   false;
}
#region   menu   event
public   void   menuclick(object   sender,   eventargs   e)
{
object   menu   =   null;
if   (sender   is   toolstripitem)
                                menu   =   (sender   as   toolstripitem).tag;
else   if   (sender   is   listviewitem)
                                menu   =   (sender   as   listviewitem).tag;
if   (menu   !=   null)
kitemodule.instance.runmodule((string)getvalue(menu,   "modulename "),   (string)getvalue(menu,   "typename "));
}
private   void   menuhelp(object   sender,   eventargs   e)
{
if   (showhelp   !=   null)
showhelp(sender,   eventargs.empty);
}
private   void   menuabout(object   sender,   eventargs   e)
{
if   (showabout   !=   null)
showabout(sender,   eventargs.empty);
}
                private   void   menuexit(object   sender,   eventargs   e)
                {
                        application.exit();
                }
                private   void   menucheckupdate(object   sender,   eventargs   e)
{
                        kitesoft.utils.update.checkupdate();
}
private   void   menumin(object   sender,   eventargs   e)
{
                        //foreach   (baseform   frm   in   baseform.formlist)
                        //         frm.windowstate   =   formwindowstate.minimized;
                        mainform.windowstate   =   formwindowstate.minimized;
}
                private   void   menumax(object   sender,   eventargs   e)
                {
                        //foreach   (baseform   frm   in   baseform.formlist)
                        //         frm.windowstate   =   formwindowstate.minimized;
                        if   (mainform.windowstate   ==   formwindowstate.normal)
                        {
                                mainform.windowstate   =   formwindowstate.maximized;
                                m_maxmenu.text   =   "还原 ";
                        }
                        else
                        {
                                mainform.windowstate   =   formwindowstate.normal;
                                m_maxmenu.text   =   "最大化 ";
                        }
                }
#endregion
发表于:2007-02-05 16:27:373楼 得分:0
thanks   ,   it 's   very   good   !
发表于:2007-04-18 14:31:154楼 得分:0
up


快速检索

最新资讯
热门点击