Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载]
Posted on 2007-12-17 10:14 csdnexpert 阅读(112) 评论(0) 编辑 收藏 举报(一). 概述
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代码
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