📄 treeview.cs
字号:
//------------------------------------------------------------------------------
// Copyright (c) 2000-2003 Microsoft Corporation. All Rights Reserved.
//------------------------------------------------------------------------------
namespace Microsoft.Web.UI.WebControls
{
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
using System.Data;
using System.IO;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;
/// <summary>
/// Event arguments for the OnSelectedIndexChange event
/// </summary>
public class TreeViewSelectEventArgs : EventArgs
{
private string _oldnodeindex;
private string _newnodeindex;
/// <summary>
/// The previously selected node.
/// </summary>
public string OldNode
{
get {return _oldnodeindex;}
}
/// <summary>
/// The newly selected node.
/// </summary>
public string NewNode
{
get {return _newnodeindex;}
}
/// <summary>
/// Initializes a new instance of a TreeViewSelectEventArgs object.
/// </summary>
/// <param name="strOldNodeIndex">The old node.</param>
/// <param name="strNewNodeIndex">The new node.</param>
public TreeViewSelectEventArgs(string strOldNodeIndex, string strNewNodeIndex)
{
_oldnodeindex = strOldNodeIndex;
_newnodeindex = strNewNodeIndex;
}
}
/// <summary>
/// Event arguments for the OnClick event
/// </summary>
public class TreeViewClickEventArgs : EventArgs
{
private string _nodeid;
/// <summary>
/// The ID of the node that was clicked.
/// </summary>
public string Node
{
get { return _nodeid; }
}
/// <summary>
/// Initializes a new instance of a TreeViewClickEventArgs object.
/// </summary>
/// <param name="node">The ID of the node that was clicked</param>
public TreeViewClickEventArgs(string node)
{
_nodeid = node;
}
}
/// <summary>
/// Class to eliminate runat="server" requirement and restrict content to approved tags
/// </summary>
internal class TreeViewControlBuilder : FilterControlBuilder
{
protected override void FillTagTypeTable()
{
Add("treenode", typeof(TreeNode));
Add("treenodetype", typeof(TreeNodeType));
}
}
/// <summary>
/// Delegate to handle click events on the TreeView.
/// </summary>
public delegate void ClickEventHandler(object sender, TreeViewClickEventArgs e);
/// <summary>
/// Delegate to handle select events on the TreeView.
/// </summary>
public delegate void SelectEventHandler(object sender, TreeViewSelectEventArgs e);
/// <summary>
/// TreeView class: Represents a tree.
/// </summary>
[
ParseChildren(false),
ControlBuilderAttribute(typeof(TreeViewControlBuilder)),
Designer(typeof(Microsoft.Web.UI.WebControls.Design.TreeViewDesigner)),
ToolboxBitmap(typeof(Microsoft.Web.UI.WebControls.TreeView)),
]
public class TreeView : BasePostBackControl
{
/// <summary>
/// Event fired when a TreeNode is expanded.
/// </summary>
[ResDescription("TreeExpand")]
public event ClickEventHandler Expand;
/// <summary>
/// Event fired when a TreeNode is collapsed.
/// </summary>
[ResDescription("TreeCollapse")]
public event ClickEventHandler Collapse;
/// <summary>
/// Event fired when a TreeNode's checkbox is clicked.
/// </summary>
[ResDescription("TreeCheck")]
public event ClickEventHandler Check;
/// <summary>
/// Event fired when the selected TreeNode changes.
/// </summary>
[ResDescription("TreeSelectedIndexChanged")]
public event SelectEventHandler SelectedIndexChange;
private TreeNodeTypeCollection _TreeNodeTypes;
private TreeNodeCollection _Nodes;
private bool _bFocused;
private int _scrollTop;
private int _scrollLeft;
private int _parentTop;
private int _parentLeft;
private CssCollection _HoverStyle;
private CssCollection _DefaultStyle;
private CssCollection _SelectedStyle;
private bool _bCreated;
internal ArrayList _eventList;
/// <summary>
/// Initializes a new instance of a TreeView.
/// </summary>
public TreeView() : base()
{
_TreeNodeTypes = new TreeNodeTypeCollection(this);
_Nodes = new TreeNodeCollection(this);
_bFocused = false;
_bCreated = false;
_HoverStyle = new CssCollection();
_DefaultStyle = new CssCollection();
_SelectedStyle = new CssCollection();
_scrollTop = _scrollLeft = -1;
_parentTop = _parentLeft = -1;
_eventList = new ArrayList();
}
/// <summary>
/// Called when a TreeNode expands.
/// </summary>
/// <param name="e">Event arguments.</param>
protected virtual void OnExpand(TreeViewClickEventArgs e)
{
if (Expand != null)
Expand(this, e);
}
/// <summary>
/// Called when a TreeNode collapses.
/// </summary>
/// <param name="e">Event arguments.</param>
protected virtual void OnCollapse(TreeViewClickEventArgs e)
{
if (Collapse != null)
Collapse(this, e);
}
/// <summary>
/// Called when a TreeNode's checkbox is clicked.
/// </summary>
/// <param name="e">Event arguments.</param>
protected virtual void OnCheck(TreeViewClickEventArgs e)
{
if (Check != null)
Check(this, e);
}
/// <summary>
/// Called when the selected TreeNode changes.
/// </summary>
/// <param name="e">Event arguments.</param>
protected internal virtual void DoSelectedIndexChange(TreeViewSelectEventArgs e)
{
// select/deselect nodes
TreeNode node = GetNodeFromIndex(e.OldNode);
if (node != null)
node.Selected = false;
node = GetNodeFromIndex(e.NewNode);
if (node != null)
{
node.Selected = true;
SelectedNodeIndex = e.NewNode;
}
}
/// <summary>
/// Event handler for selection changes.
/// </summary>
/// <param name="e">Event arguments.</param>
protected internal virtual void OnSelectedIndexChange(TreeViewSelectEventArgs e)
{
if (SelectedIndexChange != null)
SelectedIndexChange(this, e);
}
/// <summary>
/// Style to use when hovered
/// </summary>
[
Category("Styles"),
DefaultValue(typeof(CssCollection), ""),
PersistenceMode(PersistenceMode.Attribute),
ResDescription("ParentHoverStyle"),
]
public CssCollection HoverStyle
{
get
{
return _HoverStyle;
}
set
{
_HoverStyle = value;
if (IsTrackingViewState)
{
((IStateManager)_HoverStyle).TrackViewState();
_HoverStyle.Dirty = true;
}
}
}
/// <summary>
/// Default style
/// </summary>
[
Category("Styles"),
DefaultValue(typeof(CssCollection), ""),
PersistenceMode(PersistenceMode.Attribute),
ResDescription("ParentDefaultStyle"),
]
public CssCollection DefaultStyle
{
get
{
return _DefaultStyle;
}
set
{
_DefaultStyle = value;
if (IsTrackingViewState)
{
((IStateManager)_DefaultStyle).TrackViewState();
_DefaultStyle.Dirty = true;
}
}
}
/// <summary>
/// Style to use when selected
/// </summary>
[
Category("Styles"),
DefaultValue(typeof(CssCollection), ""),
PersistenceMode(PersistenceMode.Attribute),
ResDescription("ParentSelectedStyle"),
]
public CssCollection SelectedStyle
{
get
{
return _SelectedStyle;
}
set
{
_SelectedStyle = value;
if (IsTrackingViewState)
{
((IStateManager)_SelectedStyle).TrackViewState();
_SelectedStyle.Dirty = true;
}
}
}
/// <summary>
/// Url of the image to display when not selected, expanded, or hovered
/// </summary>
[
Category("Appearance"),
DefaultValue(""),
PersistenceMode(PersistenceMode.Attribute),
Editor(typeof(System.Web.UI.Design.ImageUrlEditor), typeof(UITypeEditor)),
ResDescription("TreeImageUrl"),
]
public String ImageUrl
{
get
{
object str = ViewState["ImageUrl"];
return ((str == null) ? String.Empty : (String) str);
}
set
{
ViewState["ImageUrl"] = value;
}
}
/// <summary>
/// Url of the image to display when selected
/// </summary>
[
Category("Appearance"),
DefaultValue(""),
PersistenceMode(PersistenceMode.Attribute),
Editor(typeof(System.Web.UI.Design.ImageUrlEditor), typeof(UITypeEditor)),
ResDescription("TreeSelectedImageUrl"),
]
public String SelectedImageUrl
{
get
{
object str = ViewState["SelectedImageUrl"];
return ((str == null) ? String.Empty : (String) str);
}
set
{
ViewState["SelectedImageUrl"] = value;
}
}
/// <summary>
/// Url of the image to display when expanded
/// </summary>
[
Category("Appearance"),
DefaultValue(""),
PersistenceMode(PersistenceMode.Attribute),
Editor(typeof(System.Web.UI.Design.ImageUrlEditor), typeof(UITypeEditor)),
ResDescription("TreeExpandedImageUrl"),
]
public String ExpandedImageUrl
{
get
{
object str = ViewState["ExpandedImageUrl"];
return ((str == null) ? String.Empty : (String) str);
}
set
{
ViewState["ExpandedImageUrl"] = value;
}
}
/// <summary>
/// id of the window to target with a navigation upon selecting this node
/// </summary>
[
Category("Behavior"),
DefaultValue(""),
PersistenceMode(PersistenceMode.Attribute),
ResDescription("TreeTarget"),
]
public String Target
{
get
{
object str = ViewState["Target"];
return ((str == null) ? String.Empty : (String)str);
}
set
{
ViewState["Target"] = value;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -