快速业务通道

将ASP.NET控件加入快捷菜单

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
tip
 {
get {return _tooltip;}
set {_tooltip = value;}
 }
}

每个菜单项具有显示文本,命令名(command name),提示文本(tooltip)。你可以通过各方法扩展这个类,例如添加一个图片URL,一个不可用状态,或一个目标URL等。显示文本被显示于菜单项上;命令名是一个唯一标识字符串,用于指定或确定与菜单项关联的命令。tooltip获取或设置当鼠标指针停留在菜单项上时显示的工具提示文本

当用户点击菜单项时,页面回传并激发一个服务器端的ItemCommand事件。控制页通过操作这一事件来执行一些代码来响应用户对菜单项的点击。图3是一个使用快捷菜单的示例工程的截图:

将ASP.NET控件加入快捷菜单

要使用快捷菜单,你需要使用menu item对象填充ContextMenuItems集合,调整一些可视化样式,至少添加一个控件到BoundControls集合中。然后在浏览器中打开示例页,在任意绑定快捷菜单的控件上右击。效果如图:

将ASP.NET控件加入快捷菜单

每个菜单项包含一个LinkButton控件,这个LinkButton控件有一个内部绑定的点击事件处理程序。当检测到点击时,页面回传并激发这个点击事件。接着,预定义的处理程序将事件冒泡到上一级,并改名为ItemCommand。

控件还定义了一些可视化的属性,象CellPadding,RolloverColor和AutoHide。重申一下,在Windows中快捷菜单可以在按下Esc键或在菜单区域外点击时取消。对于基于Web的快捷菜单来说,AutoHide属性为快捷菜单的根标签添加OnMouseLeave脚本,所以当用户的鼠标离开菜单区域时,这个根标签的子树将隐藏。把AutoHide作为一个可设置的属性,用户可以在需要的时候设置是否在鼠标离开时自动隐藏快捷菜单。

要使菜单能够在点击或按Esc键时隐藏,需要添加如下处理程序:< br><bodyonkeypress="..."onclick="...">

处理程序脚本可以被程序化的添加到每一个页面元素,只要这个元素被标记为runat=server。这样实际上就是在ContextMenu快捷菜单控件和页面之间创建了一个逻辑信赖。另外,你必须在页面上定义一个额外的服务器控件。当然,在运行时实例化一个额外的控件并不会严重的影响执行效果,但是为什么仅仅因为想容易的consume其它的控件而实例化一个无用的控件呢。作为选择下面这个方法也可以达到同样的效果:用body获取按Esc键和鼠标点击,并且你节省了服务器控件的开支

<body onkeypress="<% = ContextMenu1.GetEscReference() %>" onclick="<% = ContextMenu1.GetOnClickReference() %>">

让我们更详细的说一下控件的实现

控件的实现

ContextMenu控件的核心在于重写CreatechildControls方法。在这个方法中控件创建界面并在页面中写入所需的脚本。我们说过,ContexMenu控件的用户界面分为两部分——图形和脚本。我们先说图形。

CreateChildControls方法产生一个可以在页面移动的HTML块,它就是所需的弹出菜单。照这样看来,快捷菜单就是包含一个table表单的<DIV> ,每一个菜单项就是这个table表单中的一行。使用table是由于一系列的开发点(象边框和浮动层)和它能很容易的扩展(例如添加侧边图象)所决定的。

HtmlGenericControl div = new HtmlGenericControl("div");
div.ID = "Root";
div.Style["Display"] = "none";
div.Style["position"] = "absolute";
if (AutoHide)
 div.Attributes["onmouseleave"] = "this.style.display=’none’";

我们使用层叠样式表(CSS)来隐藏最外层的<DIV>标签,并且用绝对位置标记这个<DIV>。如果自动隐藏可用,那么<DIV> 还得处理 mouse-leave(鼠标离开)事件来隐藏本身。那么 onmouseout和onmouseleave事件有

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号