您的位置:首页 > 编程语言 > ASP

Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载]

2007-12-18 22:14 1176 查看
(一). 概述
        1. 当鼠标悬浮到控件对象上,  会弹出此自定义控件.
        2. 具有通用性, 只要支持 onmouseenter/onmouseleave 等几个事件方法的目标控件都可以使用此控件.
        3. 此控件与前面自定义控件[右击弹出菜单]控件有些类似,  区别是这个控件客户端JavaScript部分有些麻烦.
(二). 运行如图


  



(三). 用法
   1. 将FloatTraceMenu控件Dll添加引用到Web站点工程中
   2. 从工具箱拖动一个FloatTraceMenu控件和另一个支持onmouseenter/onmouseleave 等事件
       的控件到设计器中, 比如:     1 /// 
  2     /// Author: [ ChengKing(ZhengJian) ] 
  3     /// Blog:   Http://blog.csdn.net/ChengKing
  4     /// Date:   2007/4/3
  5     /// 
  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                     "");
 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("");
 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("");
102             }
103             else
104             {
105                 strInitScript.Append("");
106                 strInitScript.Append("   alert('Please Set TargetControl Property!'); ");
107                 strInitScript.Append("");
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代码
[align=center]1 <div>
2    <asp:GridView ID="GridView1" runat="server" asp:GridView>  
3    <cc1:FloatTraceMenu ID="FloatTraceMenu1" runat="server" TargetControl= "GridView1"> cc1:FloatTraceMenu>                      
4 div>[/align](五). 示例代码下载
        http://www.cnblogs.com/Files/MVP33650/自定义控件开发--[浮动工具条].rar
 
       [扩展]可以自定义(手动编程)浮动菜单的款项
       http://www.cnblogs.com/Files/MVP33650/自定义控件开发--[浮动工具条--可手动编码自定义菜单项]V2.rar
      
(六). 控件开发其它相关文章:
        http://blog.csdn.net/ChengKing/category/288694.aspx
 
 
 
 
 
 
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1552195
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐