CSDN专家博客精华版

为人民服务!
  首页  :: 新随笔  :: 管理

(一). 概述

        1. 当鼠标悬浮到控件对象上,  会弹出此自定义控件.

        2. 具有通用性, 只要支持 onmouseenter/onmouseleave 等几个事件方法的目标控件都可以使用此控件.

        3. 此控件与前面自定义控件[右击弹出菜单]控件有些类似,  区别是这个控件客户端JavaScript部分有些麻烦.

(二). 运行如图

  

(三). 用法

   1. 将FloatTraceMenu控件Dll添加引用到Web站点工程中

   2. 从工具箱拖动一个FloatTraceMenu控件和另一个支持onmouseenter/onmouseleave 等事件

       的控件到设计器中, 比如: <GridView id="GridView1" runat="server" />  <img id="img' /> 等

   3. 设置FloatTraceMenu的属性指向目标控件ID,  比如:  TargetControl=GridView1

   4. F5运行即可

(四). 完整代码

    1. 主控件FloatTraceMenu.cs代码   

  1 /// <summary>
  2     /// Author: [ ChengKing(ZhengJian) ] 
  3     /// Blog:   Http://blog.csdn.net/ChengKing
  4     /// Date:   2007/4/3
  5     /// </summary>
  6     [DefaultProperty("TargetControl")]
  7     [ToolboxData("<{0}:FloatTraceMenu runat=server></{0}:FloatTraceMenu>")]
  8     //[Designer(typeof(System.ComponentModel.Design.DesignerCollection))]
  9     public class FloatTraceMenu : Control, IComponent
 10     {
 11 
 12         [Bindable(true)]
 13         [Category("Appearance")]
 14         [DefaultValue("[FloatTraceMenu \"FloatTraceMenu1\"]")]
 15         [Localizable(true)]
 16         public string Text
 17         {
 18             get
 19             {
 20                 String s = (String)ViewState["Text"];
 21                 return ((s == null? String.Empty : s);
 22             }
 23 
 24             set
 25             {
 26                 ViewState["Text"= value;
 27             }
 28         }
 29 
 30         [Bindable(true)]
 31         [Category("Appearance")]
 32         [DefaultValue("")]
 33         [Description("设置此控件的寄主控件")]
 34         [TypeConverter(typeof(ControlIDConverter))]  
 35         public string TargetControl
 36         {
 37             get
 38             {
 39                 String s = (String)ViewState["TargetControl"];
 40                 return ((s == null? String.Empty : s);                                                
 41             }
 42             set
 43             {
 44                 ViewState["TargetControl"= value;
 45             }
 46         }
 47 
 48         protected override void Render(HtmlTextWriter writer)
 49         {
 50             if (DesignMode)
 51             {
 52                 this.Controls.Clear();                
 53                 LiteralControl lc = new LiteralControl();
 54                 lc.Text = this.Text;                
 55                 this.Controls.Add(lc);                
 56             }
 57             base.Render(writer);            
 58         }
 59 
 60         protected override void CreateChildControls()
 61         {            
 62             base.CreateChildControls();
 63         }
 64 
 65         protected override void OnPreRender(EventArgs e)
 66         {
 67 
 68             if (!Page.ClientScript.IsClientScriptBlockRegistered("BuildMenu"))
 69             {
 70                 Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "BuildMenu",
 71                     "<script type='text/javascript' src='JScript.js'></script>");
 72             }
 73             
 74             //GridView增加FloatMenu
 75             Control targetControl = this.FindControl(TargetControl);
 76 
 77             //给GridView头增加FloatMenu
 78             //Control targetControl = this.FindControl(TargetControl).Controls[0].Controls[0];
 79 
 80             StringBuilder strInitScript = new StringBuilder();
 81             if (targetControl != null)
 82             {                
 83                 strInitScript.Append("<script text/javascript> ");
 84                 strInitScript.Append("   writeStyle(); makeMenu(); var obj;");
 85                 strInitScript.Append("   if( document.all&&window.print ) ");
 86                 strInitScript.Append("   { ");
 87                 strInitScript.Append("      var objClientId = '" + targetControl.ClientID + "';");
 88                 strInitScript.Append("      if(objClientId != null) ");
 89                 strInitScript.Append("      {");
 90                 strInitScript.Append("         obj = document.getElementById(objClientId);");
 91                 strInitScript.Append("         document.onclick = forcehideMenu;");
 92                 //strInitScript.Append("         obj.onmouseover = showMenu;");
 93                 strInitScript.Append("         obj.onmouseenter = showMenu;");
 94                 //strInitScript.Append("         obj.onmouseout = hideMenu;");
 95                 strInitScript.Append("         obj.onmouseleave = hideMenu;");
 96                 strInitScript.Append("         obj.onmousemove = moveMenu;");
 97                 strInitScript.Append("         obj.oncontextmenu = showMenu;");
 98                 strInitScript.Append("      }");
 99                 strInitScript.Append("      else {alert('Please Set TargetControl Property!')}");
100                 strInitScript.Append("   } ");
101                 strInitScript.Append("</script>");
102             }
103             else
104             {
105                 strInitScript.Append("<script text/javascript> ");
106                 strInitScript.Append("   alert('Please Set TargetControl Property!'); ");
107                 strInitScript.Append("</script>");
108             }
109             if (!Page.ClientScript.IsStartupScriptRegistered("InitScript"))
110             {
111                 Page.ClientScript.RegisterStartupScript(this.GetType(), "InitScript",
112                     strInitScript.ToString());
113             }
114            
115             base.OnPreRender(e);
116         }        
117     }

 

   2. 测试页面文件default.aspx代码

1 <div>
2    <asp:GridView ID="GridView1" runat="server" </asp:GridView>  
3    <cc1:FloatTraceMenu ID="FloatTraceMenu1" runat="server" TargetControl= "GridView1">

 </cc1:FloatTraceMenu>                      
4 </div>

(五). 示例代码下载

        https://files.cnblogs.com/MVP33650/自定义控件开发--[浮动工具条].rar

 

       [扩展]可以自定义(手动编程)浮动菜单的款项

       https://files.cnblogs.com/MVP33650/自定义控件开发--[浮动工具条--可手动编码自定义菜单项]V2.rar

      

(六). 控件开发其它相关文章:

        http://blog.csdn.net/ChengKing/category/288694.aspx

 

 

 

 

 

 

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1552195