(一). 概述
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>
(五). 示例代码下载
http://files.cnblogs.com/MVP33650/自定义控件开发--[浮动工具条].rar
[扩展]可以自定义(手动编程)浮动菜单的款项
http://files.cnblogs.com/MVP33650/自定义控件开发--[浮动工具条--可手动编码自定义菜单项]V2.rar
(六). 控件开发其它相关文章:
http://blog.csdn.net/ChengKing/category/288694.aspx