推荐两个web菜单控件(右击和顶部主菜单)

本文介绍了一款自定义右击菜单控件的实现方法,该控件使用C#和JavaScript开发,通过读取XML文件来动态生成菜单项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    前两天在整理电脑资料时,发现这两个已被打入"冷宫"的控件。

    运行效果如下:

  
    其中的右击菜单控件的js源码是从milonic网站(一个商业JS库)上搜集来的, 本人觉得它的"生成菜单项"部分
非常不好用,所以自己封装了它的部分代码,用一个 XML文件记录相应的菜单项,并用cs写了一个递归来加载XML
中的菜单项,以实现控件绑定。
   代码如下:

 

  1 protected   override   void  Render(HtmlTextWriter output)
  2   {
  3 
  4  output.Write("<script type=\"text/javascript\" src=\""+ScriptPath+"/contextmenu.
  5    js\"></script>\r\n");
  6   
  7  output.Write("<script type=\"text/javascript\">\r\n");
  8 
  9  output.Write("fixMozillaZIndex=true;\r\n");
 10  output.Write("_menuCloseDelay=500;\r\n");
 11  output.Write("_menuOpenDelay=150;\r\n");
 12  output.Write("_subOffsetTop=2;\r\n");
 13  output.Write("_subOffsetLeft=-2;\r\n");
 14
 15  output.Write("with(contextStyle=new mm_style())\r\n");
 16  output.Write("{\r\n");
 17  output.Write("bordercolor=\"#999999\";\r\n");
 18  output.Write("borderstyle=\"solid\";\r\n");
 19  output.Write("borderwidth=1;\r\n");
 20  output.Write("fontfamily=\"arial, verdana, tahoma\";\r\n");
 21  output.Write("fontsize=\"75%\";\r\n");
 22  output.Write("fontstyle=\"normal\";\r\n");
 23  output.Write("headerbgcolor=\"#4F8EB6\";\r\n");
 24  output.Write("headerborder=1;\r\n");
 25  output.Write("headercolor=\"#ffffff\";\r\n");
 26  output.Write("offbgcolor=\"#ffffff\";\r\n");
 27  output.Write("offcolor=\"#000000\";\r\n");
 28  output.Write("onbgcolor=\"#ECF4F9\";\r\n");
 29  output.Write("onborder=\"1px solid #316AC5\";\r\n");
 30  output.Write("oncolor=\"#000000\";\r\n");
 31  output.Write("outfilter=\"randomdissolve(duration=0.4)\";\r\n");
 32  output.Write("overfilter=\"Fade(duration=0.2);Shadow(color=#777777', Direction=135,
 33     Strength=3)\";\r\n");
 34  output.Write("padding=3;\r\n");
 35  output.Write("pagebgcolor=\"#eeeeee\";\r\n");
 36  output.Write("pageborder=\"1px solid #ffffff\";\r\n");
 37  output.Write("pageimage=\""+this.ImageUrl+"/pageimg.gif\";\r\n");
 38  output.Write("separatorcolor=\"#999999\";\r\n");
 39  output.Write("subimage=\""+this.ImageUrl+"/subarrow.gif\";\r\n");
 40  output.Write("}\r\n");
 41
 42  output.Write("with(milonic=new menuname(\"contextMenu\")){\r\n");
 43  output.Write("margin=3;\r\n");
 44  output.Write("style=contextStyle;\r\n");
 45  output.Write("top=\"offset=2\";\r\n");
 46  
 47  DataSet dsSrc = new DataSet();
 48  dsSrc.ReadXml(System.Web.HttpContext.Current.Server.MapPath(this.XmlFileFullPathName));
 49
 50  string result="";
 51  foreach(System.Data.DataRow dr in dsSrc.Tables[0].Select("parentid=0"))
 52  {
 53
 54   输出主菜单#region 输出主菜单
 55   output.Write("aI(\"");
 56   if(dr["imgurl"].ToString().Trim()!="")
 57   {
 58    output.Write("image="+ this.ImageUrl + "/" + dr["imgurl"].ToString().
 59    Trim()+";");
 60   }

 61
 62   if(dr["showmenu"].ToString().Trim()!="")
 63   {
 64    output.Write("showmenu="+dr["menuid"].ToString().Trim()+";");
 65    result += LoadSubMenuItem(dsSrc,dr["menuid"].ToString().Trim(),
 66    dr["itemwidth"].ToString().Trim(),dr["margin"].ToString().Trim());
 67   }

 68
 69   if(dr["separatorsize"].ToString().Trim()!="")
 70   {
 71    output.Write("separatorsize="+dr["separatorsize"].ToString().Trim()+";");
 72   }

 73
 74   if(dr["menutitle"].ToString().Trim()!="")
 75   {
 76    output.Write("text="+dr["menutitle"].ToString().Trim()+";");
 77   }

 78 
 79   if(dr["url"].ToString().Trim()!="")
 80   {
 81    output.Write("url="+dr["url"].ToString().Trim()+";");
 82   }

 83    
 84    output.Write("\");\r\n");
 85    #endregion

 86   }

 87
 88   output.Write("}\r\n");
 89   output.Write(result);
 90   output.Write("drawMenus();\r\n");
 91
 92   output.Write("</script>\r\n");
 93  }

 94
 95   private   string  LoadSubMenuItem(DataSet dsSrc , string  parentid, string  itemwidth,  string  margin)
 96   {
 97  StringBuilder sb=new StringBuilder();
 98
 99  DataRow[] drs = dsSrc.Tables[0].Select("parentid="+parentid);
100  if(drs.Length>0)
101  {
102   
103   sb.Append("with(milonic=new menuname(\""+parentid+"\")){\r\n");
104   sb.Append("itemwidth="+(itemwidth==""?"127":itemwidth)+";\r\n");
105   sb.Append("margin="+(margin==""?"3":margin)+";\r\n");
106   sb.Append("overflow=\"scroll\";\r\n");
107   sb.Append("style=contextStyle;\r\n");
108
109   string result="";
110   foreach(DataRow dr in drs)
111   {
112    输出主菜单#region 输出主菜单
113    sb.Append("aI(\"");
114    if(dr["imgurl"].ToString().Trim()!="")
115    {
116     sb.Append("image="+ this.ImageUrl + "/" + dr["imgurl"].ToString().
117     Trim()+";");
118    }

119
120    string a=dr["showmenu"].ToString().Trim();
121    if(dr["showmenu"].ToString().Trim()!="")
122    {
123     sb.Append("showmenu="+dr["menuid"].ToString().Trim()+";");
124     result += LoadSubMenuItem(dsSrc,dr["menuid"].ToString().Trim(),
125     dr["itemwidth"].ToString().Trim(),dr["margin"].ToString().Trim());
126    }

127
128    if(dr["separatorsize"].ToString().Trim()!="")
129    {
130     sb.Append("separatorsize="+dr["separatorsize"].ToString().Trim()+";");
131    }

132
133    if(dr["menutitle"].ToString().Trim()!="")
134    {
135     sb.Append("text="+dr["menutitle"].ToString().Trim()+";");
136    }

137 
138    if(dr["url"].ToString().Trim()!="")
139    {
140     sb.Append("url="+dr["url"].ToString().Trim()+";");
141    }

142    
143    sb.Append("\");\r\n");
144    #endregion

145    }

146   sb.Append("}\r\n");
147   sb.Append(result);
148  }

149           return sb.ToString();
150 }

151
152

    而另一个顶部菜单源码(c#)最早是从codeproject上得到的, 原作者我已忘记了,本人在这个控件基础上加上了图片菜单项
(修改 xsl),相信如果大家有Css基础的话,只要改一下相应的menu.css中的代码就会得到诸如 XP风格等样式的菜单了。另外因
为原作者写的代码扩展性很好,大家可以加入更多的个性化的元素。

    关键字:.net, 控件,control,菜单,mainmenu右击菜单,contextmenu,代震军,daizhj

    下载链接(for vs2008):/Files/daizhj/ContextMenu.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值