前两天在整理电脑资料时,发现这两个已被打入"冷宫"的控件。
运行效果如下:
其中的右击菜单控件的js源码是从milonic网站(一个商业JS库)上搜集来的, 本人觉得它的"生成菜单项"部分
非常不好用,所以自己封装了它的部分代码,用一个 XML文件记录相应的菜单项,并用cs写了一个递归来加载XML
中的菜单项,以实现控件绑定。
代码如下:
1
protected
override
void
Render(HtmlTextWriter output)
2
{
3
4
output.Write("<script type=\"text/javascript\" src=\""+ScriptPath+"/contextmenu.
5
js\"></script>\r\n");
6
7
output.Write("<script type=\"text/javascript\">\r\n");
8
9
output.Write("fixMozillaZIndex=true;\r\n");
10
output.Write("_menuCloseDelay=500;\r\n");
11
output.Write("_menuOpenDelay=150;\r\n");
12
output.Write("_subOffsetTop=2;\r\n");
13
output.Write("_subOffsetLeft=-2;\r\n");
14
15
output.Write("with(contextStyle=new mm_style())\r\n");
16
output.Write("{\r\n");
17
output.Write("bordercolor=\"#999999\";\r\n");
18
output.Write("borderstyle=\"solid\";\r\n");
19
output.Write("borderwidth=1;\r\n");
20
output.Write("fontfamily=\"arial, verdana, tahoma\";\r\n");
21
output.Write("fontsize=\"75%\";\r\n");
22
output.Write("fontstyle=\"normal\";\r\n");
23
output.Write("headerbgcolor=\"#4F8EB6\";\r\n");
24
output.Write("headerborder=1;\r\n");
25
output.Write("headercolor=\"#ffffff\";\r\n");
26
output.Write("offbgcolor=\"#ffffff\";\r\n");
27
output.Write("offcolor=\"#000000\";\r\n");
28
output.Write("onbgcolor=\"#ECF4F9\";\r\n");
29
output.Write("onborder=\"1px solid #316AC5\";\r\n");
30
output.Write("oncolor=\"#000000\";\r\n");
31
output.Write("outfilter=\"randomdissolve(duration=0.4)\";\r\n");
32
output.Write("overfilter=\"Fade(duration=0.2);Shadow(color=#777777', Direction=135,
33
Strength=3)\";\r\n");
34
output.Write("padding=3;\r\n");
35
output.Write("pagebgcolor=\"#eeeeee\";\r\n");
36
output.Write("pageborder=\"1px solid #ffffff\";\r\n");
37
output.Write("pageimage=\""+this.ImageUrl+"/pageimg.gif\";\r\n");
38
output.Write("separatorcolor=\"#999999\";\r\n");
39
output.Write("subimage=\""+this.ImageUrl+"/subarrow.gif\";\r\n");
40
output.Write("}\r\n");
41
42
output.Write("with(milonic=new menuname(\"contextMenu\")){\r\n");
43
output.Write("margin=3;\r\n");
44
output.Write("style=contextStyle;\r\n");
45
output.Write("top=\"offset=2\";\r\n");
46
47
DataSet dsSrc = new DataSet();
48
dsSrc.ReadXml(System.Web.HttpContext.Current.Server.MapPath(this.XmlFileFullPathName));
49
50
string result="";
51
foreach(System.Data.DataRow dr in dsSrc.Tables[0].Select("parentid=0"))
52
{
53
54
输出主菜单#region 输出主菜单
55
output.Write("aI(\"");
56
if(dr["imgurl"].ToString().Trim()!="")
57
{
58
output.Write("image="+ this.ImageUrl + "/" + dr["imgurl"].ToString().
59
Trim()+";");
60
}
61
62
if(dr["showmenu"].ToString().Trim()!="")
63
{
64
output.Write("showmenu="+dr["menuid"].ToString().Trim()+";");
65
result += LoadSubMenuItem(dsSrc,dr["menuid"].ToString().Trim(),
66
dr["itemwidth"].ToString().Trim(),dr["margin"].ToString().Trim());
67
}
68
69
if(dr["separatorsize"].ToString().Trim()!="")
70
{
71
output.Write("separatorsize="+dr["separatorsize"].ToString().Trim()+";");
72
}
73
74
if(dr["menutitle"].ToString().Trim()!="")
75
{
76
output.Write("text="+dr["menutitle"].ToString().Trim()+";");
77
}
78
79
if(dr["url"].ToString().Trim()!="")
80
{
81
output.Write("url="+dr["url"].ToString().Trim()+";");
82
}
83
84
output.Write("\");\r\n");
85
#endregion
86
}
87
88
output.Write("}\r\n");
89
output.Write(result);
90
output.Write("drawMenus();\r\n");
91
92
output.Write("</script>\r\n");
93
}
94
95
private
string
LoadSubMenuItem(DataSet dsSrc ,
string
parentid,
string
itemwidth,
string
margin)
96
{
97
StringBuilder sb=new StringBuilder();
98
99
DataRow[] drs = dsSrc.Tables[0].Select("parentid="+parentid);
100
if(drs.Length>0)
101
{
102
103
sb.Append("with(milonic=new menuname(\""+parentid+"\")){\r\n");
104
sb.Append("itemwidth="+(itemwidth==""?"127":itemwidth)+";\r\n");
105
sb.Append("margin="+(margin==""?"3":margin)+";\r\n");
106
sb.Append("overflow=\"scroll\";\r\n");
107
sb.Append("style=contextStyle;\r\n");
108
109
string result="";
110
foreach(DataRow dr in drs)
111
{
112
输出主菜单#region 输出主菜单
113
sb.Append("aI(\"");
114
if(dr["imgurl"].ToString().Trim()!="")
115
{
116
sb.Append("image="+ this.ImageUrl + "/" + dr["imgurl"].ToString().
117
Trim()+";");
118
}
119
120
string a=dr["showmenu"].ToString().Trim();
121
if(dr["showmenu"].ToString().Trim()!="")
122
{
123
sb.Append("showmenu="+dr["menuid"].ToString().Trim()+";");
124
result += LoadSubMenuItem(dsSrc,dr["menuid"].ToString().Trim(),
125
dr["itemwidth"].ToString().Trim(),dr["margin"].ToString().Trim());
126
}
127
128
if(dr["separatorsize"].ToString().Trim()!="")
129
{
130
sb.Append("separatorsize="+dr["separatorsize"].ToString().Trim()+";");
131
}
132
133
if(dr["menutitle"].ToString().Trim()!="")
134
{
135
sb.Append("text="+dr["menutitle"].ToString().Trim()+";");
136
}
137
138
if(dr["url"].ToString().Trim()!="")
139
{
140
sb.Append("url="+dr["url"].ToString().Trim()+";");
141
}
142
143
sb.Append("\");\r\n");
144
#endregion
145
}
146
sb.Append("}\r\n");
147
sb.Append(result);
148
}
149
return sb.ToString();
150
}
151
152

2



3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52



53

54


55

56

57



58

59

60

61

62

63



64

65

66

67

68

69

70



71

72

73

74

75



76

77

78

79

80



81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96



97

98

99

100

101



102

103

104

105

106

107

108

109

110

111



112


113

114

115



116

117

118

119

120

121

122



123

124

125

126

127

128

129



130

131

132

133

134



135

136

137

138

139



140

141

142

143

144

145

146

147

148

149

150

151

152

而另一个顶部菜单源码(c#)最早是从codeproject上得到的, 原作者我已忘记了,本人在这个控件基础上加上了图片菜单项
(修改 xsl),相信如果大家有Css基础的话,只要改一下相应的menu.css中的代码就会得到诸如 XP风格等样式的菜单了。另外因
为原作者写的代码扩展性很好,大家可以加入更多的个性化的元素。
关键字:.net, 控件,control,菜单,mainmenu右击菜单,contextmenu,代震军,daizhj
下载链接(for vs2008):/Files/daizhj/ContextMenu.rar