.NET ASP.TreeView 右键采单的实现

 

一.javasrcript 脚本

//Example2
function contextMenu()
{
 this.items   = new Array();
 
 this.addItem = function (item)
 {
  this.items[this.items.length] = item;
 }

 this.show = function (oDoc)
 {
  var strShow = "";
  var i;
 
  strShow = "<div id=/"rightmenu/" style=/"BACKGROUND-COLOR: #6699ff; BORDER: #000000 1px solid; LEFT: 0px; POSITION: absolute; TOP: 0px; VISIBILITY: hidden; Z-INDEX: 10/">";
  strShow += "<table border=/"0/" height=/"";
  strShow += this.items.length * 20;
  strShow += "/" cellpadding=/"0/" cellspacing=/"0/">";
 
  strShow += "<tr height=/"3/"><td bgcolor=/"#d0d0ce/" width=/"2/"></td><td>";
  //strShow += "<tr height=/"3/"><td bgcolor=/"#6699ff/" width=/"2/"></td><td>";
 
 strShow += "<table border=/"0/" width=/"100%/" height=/"100%/" cellpadding=0 cellspacing=0 bgcolor=/"#ffffff/">";
// strShow += "<table border=/"0/" width=/"100%/" height=/"100%/" cellpadding=0 cellspacing=0 bgcolor=/"#6699ff/">";

  strShow += "<tr><td bgcolor=/"#d0d0ce/" width=/"23/"></td><td><img src=/" /" height=/"1/" border=/"0/"></td></tr></table>";
//strShow += "<tr><td bgcolor=/"#000000/" width=/"23/"></td><td><img src=/" /" height=/"1/" border=/"0/"></td></tr></table>";

  strShow += "</td><td width=/"2/"></td></tr>";
 
  strShow += "<tr><td bgcolor=/"#d0d0ce/"></td><td>";
//  strShow += "<tr><td bgcolor=/"#6699ff/"></td><td>";
 
  strShow += "<table border=/"0/" width=/"100%/" height=/"100%/" cellpadding=3 cellspacing=0 bgcolor=/"#ffffff/">";
//strShow += "<table border=/"0/" width=/"100%/" height=/"100%/" cellpadding=3 cellspacing=0 bgcolor=/"#000000/">";
 
  oDoc.write(strShow);
  for(i=0; i<this.items.length; i++)
  {
   this.items[i].show(oDoc);
  }
  strShow = "</table></td><td></td></tr>";
 
  strShow += "<tr height=/"3/"><td bgcolor=/"#d0d0ce/"></td><td>";
 // strShow += "<tr height=/"3/"><td bgcolor=/"#000000/"></td><td>";
 
  strShow += "<table border=/"0/" width=/"100%/" height=/"100%/" cellpadding=0 cellspacing=0 bgcolor=/"#ffffff/">";
//  strShow += "<table border=/"0/" width=/"100%/" height=/"100%/" cellpadding=0 cellspacing=0 bgcolor=/"#6699ff/">";
 
  strShow += "<tr><td bgcolor=/"#d0d0ce/" width=/"23/"></td><td><img src=/" /" height=/"1/" border=/"0/"></td></tr></table>";
//strShow += "<tr><td bgcolor=/"#6699ff/" width=/"23/"></td><td><img src=/" /" height=/"1/" border=/"0/"></td></tr></table>";

  strShow += "</td><td></td></tr>";
  strShow += "</table></div>/n";
  oDoc.write(strShow);
 }
}

// menu Item object
function contextItem(text, icon, cmd, type)
{
 this.text = text ? text : "";
 this.icon = icon ? icon : "";
 this.cmd = cmd ? cmd : "";
 this.type = type ? type : "menu";
 
 this.show = function (oDoc)
 {
  var strShow = "";
 
  if(this.type == "menu")
  {
   strShow += "<tr ";
   strShow += "οnmοuseοver=/"changeStyle(this, 'on');/" ";
   strShow += "οnmοuseοut=/"changeStyle(this, 'out');/" ";
   strShow += "οnclick=/"";
   strShow += this.cmd;
   strShow += "/">";
   strShow += "<td class=/"ltdexit/" width=/"16/">";
   if (this.icon == "")
    strShow += "&nbsp;";
   else {
    strShow += "<img border=/"0/" src=/"";
    strShow += this.icon;
    strShow += "/" width=/"16/" height=/"16/" style=/"POSITION: relative/"></img>";
   }
   strShow += "</td><td class=/"mtdexit/">";
   strShow += this.text;
   strShow += "</td><td class=/"rtdexit/" width=/"5/">&nbsp;</td></tr>";
  }
  else if (this.type == "separator")
  {
   strShow += "<tr><td class=/"ltdexit/">&nbsp;</td>";
   strShow += "<td class=/"mtdexit/" colspan=/"2/"><hr color=/"#000000/" size=/"1/"></td></tr>";
  }
 
  oDoc.write(strShow);
 }
}

function changeStyle(obj, cmd)
{
 if(obj) try {
  var imgObj = obj.children(0).children(0);
 
  if(cmd == 'on') {
   obj.children(0).className = "ltdfocus";
   obj.children(1).className = "mtdfocus";
   obj.children(2).className = "rtdfocus";
   if(imgObj)
   {
    if(imgObj.tagName.toUpperCase() == "IMG")
    {
     imgObj.style.left = "-1px";
     imgObj.style.top = "-1px";
    }
   }
  }
  else if(cmd == 'out') {
   obj.children(0).className = "ltdexit";
   obj.children(1).className = "mtdexit";
   obj.children(2).className = "rtdexit";
   if(imgObj)
   {
    if(imgObj.tagName.toUpperCase() == "IMG")
    {
     imgObj.style.left = "0px";
     imgObj.style.top = "0px";
    }
   }
  }
 }
 catch (e) {}
}

function showMenu()
{
 var x, y, w, h, ox, oy;
 
 x = event.clientX;
 y = event.clientY;
 
 var obj = document.getElementById("rightmenu");
 if (obj == null)
  return true;

//ox = document.body.clientWidth;
// oy = document.body.clientHeight;
// if(x > ox || y > oy)
//  return false;
// w = obj.offsetWidth;
// h = obj.offsetHeight;
// if((x + w) > ox)
//   x = x - w;
// if((y + h) > oy)
//  y = y - h;
 
 obj.style.posLeft = x + getScrollLeft(); //document.body.scrollLeft;
 obj.style.posTop = y + getScrollTop();
 obj.style.visibility = "visible";
 
 return false;
}

function getScrollTop()
{
    var ScrollTop;
    if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
       ScrollTop = document.documentElement.scrollTop;
    }
    else if (typeof document.body != 'undefined') {
       ScrollTop = document.body.scrollTop;
    }
    return ScrollTop;
}

function getScrollLeft()
{
    var ScrollLeft;
    if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
       ScrollLeft = document.documentElement.scrollLeft;
    }
    else if (typeof document.body != 'undefined') {
       ScrollLeft = document.body.scrollLeft;
    }
    return ScrollLeft;
}

 

function hideMenu()
{
 if(event.button == 0)
 {
  var obj = document.getElementById("rightmenu");
  if (obj == null)
   return true;
  obj.style.visibility = "hidden";
  obj.style.posLeft = 0;
  obj.style.posTop = 0;
 }
}

function writeStyle()
{
 var strStyle = "";
 
 strStyle += "<STYLE type=text/css>";
 strStyle += "TABLE {Font-FAMILY: /"Tahoma/",/"Verdana/",/"宋体/"; FONT-SIZE: 9pt}";
 strStyle += ".mtdfocus {BACKGROUND-COLOR: #ccccff; BORDER-BOTTOM: #000000 1px solid; BORDER-TOP: #000000 1px solid; CURSOR: hand}";
 strStyle += ".mtdexit {BACKGROUND-COLOR: #ffffff; BORDER-BOTTOM: #ffffff 1px solid; BORDER-TOP: #ffffff 1px solid}";
 strStyle += ".ltdfocus {BACKGROUND-COLOR: #ccccff; BORDER-BOTTOM: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; CURSOR: hand}";
 strStyle += ".ltdexit {BACKGROUND-COLOR: #d0d0ce; BORDER-BOTTOM: #d0d0ce 1px solid; BORDER-TOP: #d0d0ce 1px solid; BORDER-LEFT: #d0d0ce 1px solid}";
 strStyle += ".rtdfocus {BACKGROUND-COLOR: #ccccff; BORDER-BOTTOM: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-RIGHT: #000000 1px solid; CURSOR: hand}";
 strStyle += ".rtdexit {BACKGROUND-COLOR: #ffffff; BORDER-BOTTOM: #ffffff 1px solid; BORDER-TOP: #ffffff 1px solid; BORDER-RIGHT: #ffffff 1px solid}";
 strStyle += "</STYLE>";
 
 document.write(strStyle);
}

function makeMenu()
{
 var myMenu, item;
 
 var homepage_cmd = "this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.xframe.com.cn/'); return false;";
 var favorate_cmd = "window.external.addFavorite('http://www.xframe.com.cn/','XFRAME'); return false;";
 var viewcode_cmd = "window.location = 'view-source:' + window.location.href";
 
 myMenu = new contextMenu();
 
 item = new contextItem("返回主页", "Images/returnhome.gif", "top.location='http://www.xframe.com.cn/';", "menu");
 myMenu.addItem(item);
 
 item = new contextItem("设为主页", "Images/home.gif", homepage_cmd, "menu");
 myMenu.addItem(item);
 
 item = new contextItem("添加到收藏夹", "Images/favadd.gif", favorate_cmd, "menu");
 myMenu.addItem(item);
 
 item = new contextItem("", "", "", "separator");
 myMenu.addItem(item);
 
 item = new contextItem("联系作者", "Images/mail.gif", "location.href='mailto:King.Zheng@hotmail.com'", "menu");
 myMenu.addItem(item);
 
 item = new contextItem("察看源码", "Images/edit.gif", viewcode_cmd, "menu");
 myMenu.addItem(item);
 
 item = new contextItem("自定义功能", "Images/XFRAME.gif", viewcode_cmd, "menu");
 myMenu.addItem(item);
 
 myMenu.show(this.document);

 delete item;
 delete myMenu;
}

function toggleMenu(isEnable)
{
 if(isEnable)
  document.oncontextmenu = showMenu;
 else
  document.oncontextmenu = new function() {return true;};
}


//function Init()
//{
//    writeStyle();
//    makeMenu();
//    if (document.all&&window.print)
//    {
//        document.onclick = hideMenu;
//        document.oncontextmenu = showMenu;
//    }
//}
//window.οnlοad=Init; 

 

二.自定义

using System;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TraceMenu
{
    /// <summary>
    ///
    /// </summary>
    [DefaultProperty("TargetControl")]
    [ToolboxData("<{0}:PopupTraceMenu runat=server></{0}:PopupTraceMenu>")]
    public class PopupTraceMenu : Control, IComponent
    {

        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("[PopupTraceMenu /"PopupTraceMenu11/"]")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }

            set
            {
                ViewState["Text"] = value;
            }
        }

        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Description("设置此控件的寄主控件")]
        [TypeConverter(typeof(ControlIDConverter))]
        public string TargetControl
        {
            get
            {
                String s = (String)ViewState["TargetControl"];
                return ((s == null) ? String.Empty : s);                                               
            }
            set
            {
                ViewState["TargetControl"] = value;
            }
        }

        protected override void Render(HtmlTextWriter writer)
        {
            if (DesignMode)
            {
                this.Controls.Clear();               
                LiteralControl lc = new LiteralControl();
                lc.Text = this.Text;               
                this.Controls.Add(lc);               
            }
            base.Render(writer);           
        }

        protected override void CreateChildControls()
        {           
            base.CreateChildControls();
        }

        protected override void OnPreRender(EventArgs e)
        {

            if (!Page.ClientScript.IsClientScriptBlockRegistered("BuildMenu"))
            {
                Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"BuildMenu",
                    "<script type='text/javascript' src='Script/RightMenu.js'></script>");
            }

            Control targetControl = this.FindControl(TargetControl);

            StringBuilder strInitScript = new StringBuilder();
            if (targetControl != null)
            {               
                strInitScript.Append("<script text/javascript> ");
                strInitScript.Append("   writeStyle(); makeMenu(); ");
                strInitScript.Append("   if( document.all&&window.print ) ");
                strInitScript.Append("   { ");
                strInitScript.Append("      var objClientId = '" + targetControl.ClientID + "';");
                strInitScript.Append("      if(objClientId != null) ");
                strInitScript.Append("      {");
                strInitScript.Append("         var obj = document.getElementById(objClientId);");
                strInitScript.Append("         document.onclick = hideMenu; ");
                strInitScript.Append("         obj.oncontextmenu = showMenu;");
                strInitScript.Append("      }");
                strInitScript.Append("      else {alert('Please Set TargetControl Property!')}");
                strInitScript.Append("   } ");
                strInitScript.Append("</script>");
            }
            else
            {
                strInitScript.Append("<script text/javascript> ");
                strInitScript.Append("   alert('Please Set TargetControl Property!'); ");
                strInitScript.Append("</script>");
            }
            if (!Page.ClientScript.IsStartupScriptRegistered("InitScript"))
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "InitScript",
                    strInitScript.ToString());
            }
          
            base.OnPreRender(e);
        }       
    }
}

三 . 前台aspx文件

<cc1:PopupTraceMenu ID="PopupTraceMenu1" runat="server" TargetControl="TreeView1"></cc1:PopupTraceMenu>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值