如何实现在Asp.net下XP风格的下拉菜单
结合Jst和Css实现了在Asp.net下XP风格的下拉菜单,效果图如下:
实现的步骤及源码如下:
Default.aspx代码:
1
<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="PopupMenuControlSample._default" %>
2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
3
<HTML>
4
<HEAD>
5
<title>PopupMenu control sample</title>
6
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
7
<meta content="C#" name="CODE_LANGUAGE">
8
<meta content="JavaScript" name="vs_defaultClientScript">
9
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
10
<LINK href="PopupMenuSample.css" type="text/css" rel="Stylesheet">
11
</HEAD>
12
<body bgColor="#ffffcc" MS_POSITIONING="GridLayout">
13
<form id="MainForm" method="post" runat="server">
14
<asp:label id="PopupMenuOwner" Runat="server" CssClass="MainText">Click on me to show the popup menu</asp:label>
15
</form>
16
</body>
17
</HTML>
18![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/None.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/None.gif)
18
![](/Images/OutliningIndicators/None.gif)
Default.aspx.cs代码:
1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Web;
7
using System.Web.SessionState;
8
using System.Web.UI;
9
using System.Web.UI.WebControls;
10
using System.Web.UI.HtmlControls;
11
using UIControl;
12![](/Images/OutliningIndicators/None.gif)
13
namespace PopupMenuControlSample
14
{
15
/// <summary>
16
/// Summary description for _default.
17
/// </summary>
18
public class _default : System.Web.UI.Page
19
{
20
const string ControlContainer = "MainForm";
21
const string ClickedMessage = "<BR/><BR/>The menu item '{0}' has been selected by the user.";
22
const string NoMenuItemClicked = "<BR/><BR/>No menu item has been clicked yet.";
23
const string MessageStyle = "Message";
24
const string MenuControlID = "PopupMenu";
25
const MenuItemDirection MenuDirection = MenuItemDirection.Vertical;
26
const string PopupMenuParentID = "PopupMenuOwner";
27
const string Services = "Services";
28
const string ServicesAltText = "available services";
29
const string ServicesName = "Services";
30
const string ServicesJavaScript = null;
31
const string ServicesImageUrl = null;
32
const MenuItemDirection ServicesDirection = MenuItemDirection.Vertical;
33
const string ServicesTableID = "Services";
34
const string AboutMe = "About me";
35
const string AboutMeAltText = "about me";
36
const string AboutMeName = "AboutMe";
37
const string AboutMeJavaScript = null;
38
const string AboutMeImageUrl = null;
39
const MenuItemDirection AboutMeDirection = MenuItemDirection.Vertical;
40
const string AboutMeTableID = "AboutMe";
41
const string UsefulLinks = "Useful links";
42
const string UsefulLinksAltText = "useful links";
43
const string UsefulLinksName = "UsefulLinks";
44
const string UsefulLinksJavaScript = null;
45
const string UsefulLinksImageUrl = null;
46
const MenuItemDirection UsefulLinksDirection = MenuItemDirection.Vertical;
47
const string UsefulLinksTableID = "UsefulLinks";
48
const string Presenter = ".NET Presenter";
49
const string PresenterAltText = "presenter for your .NET usergroup or show";
50
const string PresenterName = "Presenter";
51
const string PresenterJavaScript = null;
52
const string PresenterImageUrl = "images/presenter.gif";
53
const string PresenterTableID = "Presenter";
54
const string Author = ".NET author";
55
const string AuthorAltText = "author for your .NET magazine";
56
const string AuthorName = "Author";
57
const string AuthorJavaScript = "window.alert('Klaus Salchner, Chief Enterprise Architect');";
58
const string AuthorImageUrl = null;
59
const string AuthorTableID = "Author";
60
const string Architect = ".NET architecture review";
61
const string ArchitectAltText = "architecture review for your .NET project";
62
const string ArchitectName = "Architect";
63
const string ArchitectJavaScript = null;
64
const string ArchitectImageUrl = "images/review.gif";
65
const string ArchitectTableID = "Architect";
66
const string Resume = "Resume";
67
const string ResumeAltText = "my resume";
68
const string ResumeName = "Resume";
69
const string ResumeJavaScript = null;
70
const string ResumeImageUrl = null;
71
const string ResumeTableID = "Resume";
72
const string ContactMe = "Contact me";
73
const string ContactMeAltText = "contact me";
74
const string ContactMeName = "ContactMe";
75
const string ContactMeJavaScript = null;
76
const string ContactMeImageUrl = "images/contactme.gif";
77
const string ContactMeTableID = "ContactMe";
78
const string CodeGuru = "CodeGuru";
79
const string CodeGuruAltText = "CodeGuru";
80
const string CodeGuruName = "CodeGuru";
81
const string CodeGuruJavaScript = null;
82
const string CodeGuruImageUrl = "images/codeguru.gif";
83
const string CodeGuruTableID = "CodeGuru";
84
const string DeveloperLand = "DeveloperLand";
85
const string DeveloperLandAltText = "DeveloperLand";
86
const string DeveloperLandName = "DeveloperLand";
87
const string DeveloperLandJavaScript = null;
88
const string DeveloperLandImageUrl = "images/developerland.gif";
89
const string DeveloperLandTableID = "DeveloperLand";
90
const string Msdn = "MSDN";
91
const string MsdnAltText = "MSDN";
92
const string MsdnName = "Msdn";
93
const string MsdnJavaScript = null;
94
const string MsdnImageUrl = "images/msdn.gif";
95
const string MsdnTableID = "Msdn";
96
const string GotDotNet = "Got-Dot-Net";
97
const string GotDotNetAltText = "Got-Dot-Net";
98
const string GotDotNetName = "GotDotNet";
99
const string GotDotNetJavaScript = null;
100
const string GotDotNetImageUrl = null;
101
const string GotDotNetTableID = "GotDotNet";
102
private Label Message;
103
protected System.Web.UI.WebControls.Label PopupMenuOwner;
104![](/Images/OutliningIndicators/InBlock.gif)
105
Web Form Designer generated code
125![](/Images/OutliningIndicators/InBlock.gif)
126
/// <summary>
127
/// initialize the form; allows us to add new controls to it
128
/// </summary>
129
/// <param name="sender">event sender</param>
130
/// <param name="e">event argument</param>
131
private void Page_Init(object sender, System.EventArgs e)
132
{
133
// create a new popup menu control to display
134
PopupMenuControl MyPopupMenu = new PopupMenuControl();
135
MyPopupMenu.MenuDirection = MenuDirection;
136
MyPopupMenu.MenuShowSubMenuIndicator = true;
137
MyPopupMenu.PopupMenuParentID = PopupMenuParentID;
138
MyPopupMenu.ShowVerticalMenuImageBar = true;
139
MyPopupMenu.ID = MenuControlID;
140![](/Images/OutliningIndicators/InBlock.gif)
141
// create the popup-menu items
142
MyPopupMenu.PopupMenu.Add(new PopupMenuItemDetails(Services, ServicesAltText, ServicesName, ServicesJavaScript, ServicesImageUrl, null, ServicesDirection, ServicesTableID, true));
143
MyPopupMenu.PopupMenu.Add(new PopupMenuItemDetails(AboutMe, AboutMeAltText, AboutMeName, AboutMeJavaScript, AboutMeImageUrl, null, AboutMeDirection, AboutMeTableID, true));
144
MyPopupMenu.PopupMenu.Add(new PopupMenuItemDetails(UsefulLinks, UsefulLinksAltText, UsefulLinksName, UsefulLinksJavaScript, UsefulLinksImageUrl, null, UsefulLinksDirection, UsefulLinksTableID, true));
145![](/Images/OutliningIndicators/InBlock.gif)
146
// create the services sub-menu
147
MyPopupMenu.PopupMenu[0].PopupSubMenus = new PopupMenuItemDetailsCollection();
148
MyPopupMenu.PopupMenu[0].PopupSubMenus.Add(new PopupMenuItemDetails(Presenter, PresenterAltText, PresenterName, PresenterJavaScript, PresenterImageUrl, null, MenuItemDirection.Vertical, PresenterTableID, false));
149
MyPopupMenu.PopupMenu[0].PopupSubMenus.Add(new PopupMenuItemDetails(Author, AuthorAltText, AuthorName, AuthorJavaScript, AuthorImageUrl, null, MenuItemDirection.Vertical, AuthorTableID, false));
150
MyPopupMenu.PopupMenu[0].PopupSubMenus.Add(new PopupMenuItemDetails(Architect, ArchitectAltText, ArchitectName, ArchitectJavaScript, ArchitectImageUrl, null, MenuItemDirection.Vertical, ArchitectTableID, false));
151![](/Images/OutliningIndicators/InBlock.gif)
152
// create the about-me sub-menu
153
MyPopupMenu.PopupMenu[1].PopupSubMenus = new PopupMenuItemDetailsCollection();
154
MyPopupMenu.PopupMenu[1].PopupSubMenus.Add(new PopupMenuItemDetails(Resume, ResumeAltText, ResumeName, ResumeJavaScript, ResumeImageUrl, null, MenuItemDirection.Vertical, ResumeTableID, false));
155
MyPopupMenu.PopupMenu[1].PopupSubMenus.Add(new PopupMenuItemDetails(ContactMe, ContactMeAltText, ContactMeName, ContactMeJavaScript, ContactMeImageUrl, null, MenuItemDirection.Vertical, ContactMeTableID, false));
156![](/Images/OutliningIndicators/InBlock.gif)
157
// create the useful links sub-menu
158
MyPopupMenu.PopupMenu[2].PopupSubMenus = new PopupMenuItemDetailsCollection();
159
MyPopupMenu.PopupMenu[2].PopupSubMenus.Add(new PopupMenuItemDetails(DeveloperLand, DeveloperLandAltText, DeveloperLandName, DeveloperLandJavaScript, DeveloperLandImageUrl, null, MenuItemDirection.Vertical, DeveloperLandTableID, false));
160
MyPopupMenu.PopupMenu[2].PopupSubMenus.Add(new PopupMenuItemDetails(CodeGuru, CodeGuruAltText, CodeGuruName, CodeGuruJavaScript, CodeGuruImageUrl, null, MenuItemDirection.Vertical, CodeGuruTableID, false));
161
MyPopupMenu.PopupMenu[2].PopupSubMenus.Add(new PopupMenuItemDetails(GotDotNet, GotDotNetAltText, GotDotNetName, GotDotNetJavaScript, GotDotNetImageUrl, null, MenuItemDirection.Vertical, GotDotNetTableID, false));
162
MyPopupMenu.PopupMenu[2].PopupSubMenus.Add(PopupMenuItemDetails.PopupMenuItemSeparator());
163
MyPopupMenu.PopupMenu[2].PopupSubMenus.Add(new PopupMenuItemDetails(Msdn, MsdnAltText, MsdnName, MsdnJavaScript, MsdnImageUrl, null, MenuItemDirection.Vertical, MsdnTableID, false));
164![](/Images/OutliningIndicators/InBlock.gif)
165
// find the cell we use to add our content
166
Control ContentCell = BaseControl.FindControl(Controls, ControlContainer);
167![](/Images/OutliningIndicators/InBlock.gif)
168
// event handler called when a menu item has been clicked
169
MyPopupMenu.MenuClicked += new MenuClicked(MyPopupMenu_MenuClicked);
170![](/Images/OutliningIndicators/InBlock.gif)
171
// if we found the content cell then let's add the popup menu control to it
172
if (ContentCell != null)
173
ContentCell.Controls.Add(MyPopupMenu);
174![](/Images/OutliningIndicators/InBlock.gif)
175
// the label which shows which menu item has been clicked
176
Message = BaseControl.CreateLabel(Controls, NoMenuItemClicked);
177
Message.CssClass = MessageStyle;
178
}
179![](/Images/OutliningIndicators/InBlock.gif)
180
/// <summary>
181
/// event handler called when a menu item has been clicked
182
/// </summary>
183
/// <param name="Controls">the menu controls collection</param>
184
/// <param name="ClickedMenuItem">the selected menu item</param>
185
void MyPopupMenu_MenuClicked(ControlCollection Controls, MenuItemDetails ClickedMenuItem)
186
{
187
Message.Text = String.Format(ClickedMessage, ClickedMenuItem.DisplayText);
188
}
189
}
190
}
191![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
125
![](/Images/OutliningIndicators/InBlock.gif)
126
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/InBlock.gif)
139
![](/Images/OutliningIndicators/InBlock.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/InBlock.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/InBlock.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/InBlock.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/InBlock.gif)
152
![](/Images/OutliningIndicators/InBlock.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/InBlock.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/InBlock.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/InBlock.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/InBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/InBlock.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/InBlock.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
179
![](/Images/OutliningIndicators/InBlock.gif)
180
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/InBlock.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
185
![](/Images/OutliningIndicators/InBlock.gif)
186
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
187
![](/Images/OutliningIndicators/InBlock.gif)
188
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
189
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
190
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
191
![](/Images/OutliningIndicators/None.gif)
PopupMenuControl.js代码:
1![](/Images/OutliningIndicators/None.gif)
2
var VisibleSubMenus = '';
3
var MenuTimer = 0;
4
var CloseTimer = 0;
5![](/Images/OutliningIndicators/None.gif)
6![](/Images/OutliningIndicators/None.gif)
7
function EnterMenuCell(MenuCell,SubMenuTable)
8
{
9
// if the sub-menu-table is not displayed at the moment
10
if (SubMenuTable.style.display == 'none')
11
{
12
// then display it now
13
SubMenuTable.style.display = '';
14![](/Images/OutliningIndicators/InBlock.gif)
15
// add this to the list of visible sub-menus; this is important if the user browses
16
// multiple cascaded sub-menus
17
if (VisibleSubMenus.length == 0)
18
VisibleSubMenus += SubMenuTable.id;
19
else
20
VisibleSubMenus += ',' + SubMenuTable.id;
21
}
22
}
23![](/Images/OutliningIndicators/None.gif)
24
//
25
// the user moves the mouse outside the menu cell
26
//
27
function LeaveMenuCell(MenuCell,SubMenuTable)
28
{
29
30
if (MenuTimer == 0)
31
MenuTimer = window.setInterval("CheckIfSubMenuToClose(" + SubMenuTable.id + ")", 20);
32
}
33![](/Images/OutliningIndicators/None.gif)
34![](/Images/OutliningIndicators/None.gif)
35
function LeaveSubMenuTable(SubMenuTable)
36
{
37
// get the list of visible sub-menus
38
var VisibleSubMenusArray = VisibleSubMenus.split(",");
39![](/Images/OutliningIndicators/InBlock.gif)
40
// get the last visible sub-menu
41
var LastVisibleSubMenu = VisibleSubMenusArray[VisibleSubMenusArray.length - 1];
42![](/Images/OutliningIndicators/InBlock.gif)
43![](/Images/OutliningIndicators/InBlock.gif)
44
if ((SubMenuTable.style.display != 'none') & (LastVisibleSubMenu == SubMenuTable.id))
45
{
46
// closes the sub-menu table
47
CloseSubMenu(SubMenuTable);
48![](/Images/OutliningIndicators/InBlock.gif)
49
50
if (MenuTimer == 0)
51
MenuTimer = window.setInterval("CloseAllSubMenus()", 20);
52
}
53
}
54![](/Images/OutliningIndicators/None.gif)
55![](/Images/OutliningIndicators/None.gif)
56
function CloseAllSubMenus()
57
{
58
// first clear the timer
59
if (MenuTimer != 0)
60
{
61
window.clearInterval(MenuTimer);
62
MenuTimer = 0;
63
}
64
65
// check if we have any sub-menus open
66
if (VisibleSubMenus.length > 0)
67
{
68
// get the list of visible sub-menus
69
var VisibleSubMenusArray = VisibleSubMenus.split(",");
70![](/Images/OutliningIndicators/InBlock.gif)
71
// now loop through all visible sub-menus and close them too
72
for (Count=0; Count < VisibleSubMenusArray.length; Count++)
73
{
74
// get a reference to the visible sub-menu
75
var SubMenu = document.getElementById(VisibleSubMenusArray[Count]);
76![](/Images/OutliningIndicators/InBlock.gif)
77
// and now hide it
78
SubMenu.style.display = 'none';
79
}
80![](/Images/OutliningIndicators/InBlock.gif)
81
// reset the list of visible sub-menus
82
VisibleSubMenus = '';
83
}
84
}
85![](/Images/OutliningIndicators/None.gif)
86
//
87
// the user moves the mosue cursor over the sub-menu table
88
//
89
function EnterSubMenuTable(SubMenuTable)
90
{
91
92
if (MenuTimer != 0)
93
{
94
window.clearInterval(MenuTimer);
95
MenuTimer = 0;
96
}
97
}
98![](/Images/OutliningIndicators/None.gif)
99![](/Images/OutliningIndicators/None.gif)
100
function CheckIfSubMenuToClose(SubMenuTable)
101
{
102
// first clear the timer itself
103
if (MenuTimer != 0)
104
{
105
window.clearInterval(MenuTimer);
106
MenuTimer = 0;
107
}
108![](/Images/OutliningIndicators/InBlock.gif)
109
// now close the sub-menu table
110
CloseSubMenu(SubMenuTable);
111
}
112![](/Images/OutliningIndicators/None.gif)
113
//
114
// closes the sub-menu table and removes it from the list of visible sub-menus
115
//
116
function CloseSubMenu(SubMenuTable)
117
{
118
// now close the sub-menu
119
SubMenuTable.style.display = 'none';
120![](/Images/OutliningIndicators/InBlock.gif)
121
// get the list of visible sub-menus
122
var VisibleSubMenusArray = VisibleSubMenus.split(",");
123![](/Images/OutliningIndicators/InBlock.gif)
124
// now we rebuild the list of visible sub-menus by excluding the sub-menu we
125
// just closed
126
VisibleSubMenus = '';
127![](/Images/OutliningIndicators/InBlock.gif)
128
// loop through all existing sub-menus
129
for (Count=0; Count < VisibleSubMenusArray.length; Count++)
130![](/Images/OutliningIndicators/InBlock.gif)
131
// if the sub-menu is the same as the one we just closed then ignore it;
132
// otherwise add it again
133
if (VisibleSubMenusArray[Count] != SubMenuTable.id)
134
if (VisibleSubMenus.length > 0)
135
VisibleSubMenus += "," + VisibleSubMenusArray[Count];
136
else
137
VisibleSubMenus = VisibleSubMenusArray[Count];
138
}
139![](/Images/OutliningIndicators/None.gif)
140![](/Images/OutliningIndicators/None.gif)
141
function SetControlPosition(SubMenuTable,ParentTable,ParentCell,ParentMenuDirection,OffsetX,OffsetY)
142
{
143
// we position the control absolute
144
SubMenuTable.style.position = 'absolute';
145![](/Images/OutliningIndicators/InBlock.gif)
146
// parent menu is horizontal, so we position the sub-menu at left/bottom
147
if (ParentMenuDirection == 'Horizontal')
148
{
149
SubMenuTable.style.left = ParentTable.offsetLeft + ParentCell.offsetLeft - 1;
150
SubMenuTable.style.top = ParentTable.offsetTop + ParentTable.offsetHeight - 1;
151
}
152
else
153![](/Images/OutliningIndicators/InBlock.gif)
154
// parent menu is vertical, so we position the sub-menu at right/top
155
if (ParentMenuDirection == 'Vertical')
156
{
157
SubMenuTable.style.left = ParentTable.offsetLeft + ParentTable.offsetWidth - 1;
158
SubMenuTable.style.top = ParentTable.offsetTop + ParentCell.offsetTop - 1;
159
}
160![](/Images/OutliningIndicators/InBlock.gif)
161
// there is no parent-menu; this is a popup menu which will be positioned in the
162
// middle of the owning control
163
else
164
{
165
SubMenuTable.style.left = ParentTable.offsetLeft + (ParentTable.offsetWidth / 2) + 1 + Number(OffsetX);
166
SubMenuTable.style.top = ParentTable.offsetTop + (ParentTable.offsetHeight / 2) + 1 + Number(OffsetY);
167![](/Images/OutliningIndicators/InBlock.gif)
168
// add any body margin we have
169
SubMenuTable.style.left = Number(SubMenuTable.style.left.replace('px','')) + Number(document.body.leftMargin);
170
SubMenuTable.style.top = Number(SubMenuTable.style.top.replace('px','')) + Number(document.body.topMargin);
171
}
172
}
173![](/Images/OutliningIndicators/None.gif)
174![](/Images/OutliningIndicators/None.gif)
175
function ShowPopupMenu(PopupOwnerControl,PopupTableControl,OffsetX,OffsetY)
176
{
177
// position the popup menu in the middle of the owner control
178
SetControlPosition(PopupTableControl, PopupOwnerControl, null, 'popup', OffsetX, OffsetY);
179![](/Images/OutliningIndicators/InBlock.gif)
180
// show the popup-menu
181
PopupTableControl.style.display = '';
182![](/Images/OutliningIndicators/InBlock.gif)
183
// give the popup menu table the focus so we know when the user clicks anywhere
184
// else (the control looses then the focus
185
PopupTableControl.focus();
186
}
187![](/Images/OutliningIndicators/None.gif)
188![](/Images/OutliningIndicators/None.gif)
189
function ClosePopupMenu(PopupOwnerControl,PopupTableControl)
190
{
191
if (CloseTimer == 0)
192
CloseTimer = window.setInterval("ClosePopupMenuDelayed(" + PopupOwnerControl.id + "," + PopupTableControl.id + ")", 190);
193
}
194![](/Images/OutliningIndicators/None.gif)
195![](/Images/OutliningIndicators/None.gif)
196
function ClosePopupMenuDelayed(PopupOwnerControl,PopupTableControl)
197
{
198
// clears first the timer
199
if (CloseTimer != 0)
200
{
201
window.clearInterval(CloseTimer);
202
CloseTimer = 0;
203
}
204![](/Images/OutliningIndicators/InBlock.gif)
205
// we hide the popup menu
206
PopupTableControl.style.display = 'none';
207![](/Images/OutliningIndicators/InBlock.gif)
208
// close any open sub-menu
209
CloseAllSubMenus();
210
}
211![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
22
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
23
![](/Images/OutliningIndicators/None.gif)
24
![](/Images/OutliningIndicators/None.gif)
25
![](/Images/OutliningIndicators/None.gif)
26
![](/Images/OutliningIndicators/None.gif)
27
![](/Images/OutliningIndicators/None.gif)
28
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
33
![](/Images/OutliningIndicators/None.gif)
34
![](/Images/OutliningIndicators/None.gif)
35
![](/Images/OutliningIndicators/None.gif)
36
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
53
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
54
![](/Images/OutliningIndicators/None.gif)
55
![](/Images/OutliningIndicators/None.gif)
56
![](/Images/OutliningIndicators/None.gif)
57
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
84
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
85
![](/Images/OutliningIndicators/None.gif)
86
![](/Images/OutliningIndicators/None.gif)
87
![](/Images/OutliningIndicators/None.gif)
88
![](/Images/OutliningIndicators/None.gif)
89
![](/Images/OutliningIndicators/None.gif)
90
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
97
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
98
![](/Images/OutliningIndicators/None.gif)
99
![](/Images/OutliningIndicators/None.gif)
100
![](/Images/OutliningIndicators/None.gif)
101
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
105
![](/Images/OutliningIndicators/InBlock.gif)
106
![](/Images/OutliningIndicators/InBlock.gif)
107
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
112
![](/Images/OutliningIndicators/None.gif)
113
![](/Images/OutliningIndicators/None.gif)
114
![](/Images/OutliningIndicators/None.gif)
115
![](/Images/OutliningIndicators/None.gif)
116
![](/Images/OutliningIndicators/None.gif)
117
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/InBlock.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
139
![](/Images/OutliningIndicators/None.gif)
140
![](/Images/OutliningIndicators/None.gif)
141
![](/Images/OutliningIndicators/None.gif)
142
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
143
![](/Images/OutliningIndicators/InBlock.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/InBlock.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
149
![](/Images/OutliningIndicators/InBlock.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
152
![](/Images/OutliningIndicators/InBlock.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/InBlock.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/InBlock.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/InBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
172
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
173
![](/Images/OutliningIndicators/None.gif)
174
![](/Images/OutliningIndicators/None.gif)
175
![](/Images/OutliningIndicators/None.gif)
176
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/InBlock.gif)
180
![](/Images/OutliningIndicators/InBlock.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/InBlock.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/InBlock.gif)
185
![](/Images/OutliningIndicators/InBlock.gif)
186
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
187
![](/Images/OutliningIndicators/None.gif)
188
![](/Images/OutliningIndicators/None.gif)
189
![](/Images/OutliningIndicators/None.gif)
190
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
191
![](/Images/OutliningIndicators/InBlock.gif)
192
![](/Images/OutliningIndicators/InBlock.gif)
193
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
194
![](/Images/OutliningIndicators/None.gif)
195
![](/Images/OutliningIndicators/None.gif)
196
![](/Images/OutliningIndicators/None.gif)
197
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/InBlock.gif)
200
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
201
![](/Images/OutliningIndicators/InBlock.gif)
202
![](/Images/OutliningIndicators/InBlock.gif)
203
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
204
![](/Images/OutliningIndicators/InBlock.gif)
205
![](/Images/OutliningIndicators/InBlock.gif)
206
![](/Images/OutliningIndicators/InBlock.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/InBlock.gif)
209
![](/Images/OutliningIndicators/InBlock.gif)
210
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
211
![](/Images/OutliningIndicators/None.gif)
PopupMenuControl.css代码:
1
.PopupMenuTableStyle
2
{
3
border: groove 2px white;
4
background-color: black;
5
position: relative;
6
left: 0px;
7
top: 0px;
8
}
9
.PopupMenuRowStyle
10
{
11
vertical-align: middle;
12
}
13
.PopupMenuCellStyle
14
{
15
background-color: #ececec;
16
text-align: left;
17
width: 180px;
18
height: 20px;
19
}
20
.PopupMenuCellHighlightedStyle
21
{
22
background-color: #ccccff;
23
text-align: left;
24
width: 180px;
25
height: 20px;
26
}
27
.PopupMenuLinkStyle
28
{
29
font: normal normal bold small/normal Arial;
30
text-decoration: none;
31
white-space: nowrap;
32
color: blue;
33
cursor: hand;
34
line-height: 18px;
35
}
36
.PopupMenuLinkHighlightedStyle
37
{
38
font: normal normal bolder small/normal Arial;
39
text-decoration: none;
40
white-space: nowrap;
41
color: #ffffcc;
42
color: blue;
43
cursor: hand;
44
line-height: 18px;
45
}
46
.MenuSeparatorCellStyle
47
{
48
background-color: #ececec;
49
height: 1px;
50
padding: 0px 0px 0px 0px;
51
margin: 0px 0px 0px 0px;
52
}
53
.MenuSeparatorStyle
54
{
55
border-top: ridge 1px;
56
width: 100%;
57
color: white;
58
height: 1px;
59
}
60
.PopupMenuImageBarStyle
61
{
62
background-color: #cccccc;
63
width: 24px;
64
}
65![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
20
![](/Images/OutliningIndicators/None.gif)
21
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
27
![](/Images/OutliningIndicators/None.gif)
28
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
36
![](/Images/OutliningIndicators/None.gif)
37
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
46
![](/Images/OutliningIndicators/None.gif)
47
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
53
![](/Images/OutliningIndicators/None.gif)
54
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
60
![](/Images/OutliningIndicators/None.gif)
61
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
65
![](/Images/OutliningIndicators/None.gif)
源码下载地址:
https://files.cnblogs.com/Terrylee/PopupMenuControlSample.rar
支持TerryLee的创业产品Worktile
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com