快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
什么不同呢?前者是当鼠标移动到一个新的元素上时发生,而后者是当鼠标移出绑定对象时发生。举例说明:你的鼠标在一个有两行的表单(table)上移动。当你在table的两行之间移动时,onmouseout事件就会发生;只有你的鼠标移动到table表单之外时onmouseleave事件才发生。

Table包含和要显示的菜单项个数相同的行,每一行有一个单元格,每个单元格里放一个LinkButton对象。菜单通过一个循环创建:

foreach(ContextMenuItem item in ContextMenuItems)
{
 TableRow menuItem = new TableRow();
 menuTable.Rows.Add(menuItem);
 TableCell container = new TableCell();
 menuItem.Cells.Add(container);
 LinkButton button = new LinkButton();
 container.Controls.Add(button);
 ...
}

行的单元格有一组脚本操作——onmouseover和onmouseout——完成鼠标划过的效果。当鼠标划过时改变背景颜色。鼠标离开时恢复初始颜色。默认的背景色由从WebControl继承的background属性指定。高亮颜色由新的属性RolloverColor指定。

string color = String.Format(ContextMenu.OnMouseOver, ColorTranslator.ToHtml(RolloverColor));
container.Attributes["onmouseover"] = color;
color = String.Format(ContextMenu.OnMouseOut, ColorTranslator.ToHtml(BackColor));
container.Attributes["onmouseout"] = color;

你需要把.NET的System.Drawing.Color值转换成可用的HTML颜色。有意思的是,无论是Color类的ToString方法还是它的Name属性都不能在所有情况下返回对应的HTML颜色字符串,不知是不是有意这样的:(。Name属性基本可以实现这一功能,只有和种情况例外。当颜色不能和已知的颜色匹配时,这个属性返回颜色的RGB组,外加alpha通道值。要得到当前的HTML颜色,你必须移除alpha通道值(通常是开头的十六进制 ff 字符串)并使用#号替换它。幸运的是,System.Drawing.ColorTranslator类可以自动完成这项工作:)。

我们接着要对链接按钮做一些调整,以使其正常工作。 也就是:把链接的宽度设成100%以确保当没有其它设置时,在整个行上光标都是手状。 同样的,要设置从对应的菜单项对象得到的文本(text),工具提示(tooltip),和命令名(command name)。最后为点击事件关联一个处理器。

LinkButton button = new LinkButton();
container.Controls.Add(button);
button.Click += new EventHandler(ButtonClicked);
button.Width = Unit.Percentage(100);
button.ToolTip = item.Tooltip;
button.Text = item.Text;
button.CommandName = item.CommandName;

回传时,事件源被识别为在ContextMenu命名容器内的LinkButton,并且得到处理回传事件的时机。点击事件的内部处理器将所有信息打包进一个新的ItemCommand 事件并引激活这个事件,参见下面的代码

private void ButtonClicked(object sender, EventArgs e)
{
 LinkButton button = sender as LinkButton;
 if (button != null)
 {
CommandEventArgs args = new CommandEventArgs( button.CommandName, button.CommandArgument);
OnItemCommand(args);
 }
}
protected virtual void OnItemCommand(CommandEventArgs e)
{
 if (ItemCommand != null)
ItemCommand(this, e);
}

页面上的代码将获得两部分内容:引发事件的ContextMenu实例;与点击项相关的command name。

这时,table就是快捷菜单的用户界面。它一开始被放置在页面的任意位置,并且使用CSS样式表在视图中隐藏。在用户右击时,这段HTML代码块(使用绝对位置方式定位)将被显示成一个快捷菜单。JavaScript代码负责截取事件并把菜单移动动所需位置,参见如下代码:

<script lan

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号