TreeView的派生类
你是第153位浏览该文章的人 playyuer csdn 2003-6-28
// playyuer@Microshaoft.com invent
//一个 TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件
//1.实现了 NodeShowToolTip 事件,结合键盘 Ctrl 键显示及设置 ToolTipText
//2.实现了 NodeDoubleClick 事件,可在调用中只响应"叶子"节点
//3.点击 TreeView 空白处不选中任何节点
//Class1.cs
using System;
public class TreeViewEx : System.Windows.Forms.TreeView
{
public event TreeViewExEventHandler NodeDoubleClick;
public event TreeViewExEventHandler NodeShowToolTip;
private void OnNodeDoubleClick(System.Windows.Forms.TreeNode xx)
{
if (this.NodeDoubleClick != null)
{
this.NodeDoubleClick(this, new TreeViewExEventArgs(xx));
}
}
private void OnNodeShowToolTip(System.Windows.Forms.TreeNode xx, System.Windows.Forms.ToolTip yy)
{
if (this.NodeShowToolTip != null)
{
if ((xx != null) && (this.toolTip != null))
this.NodeShowToolTip(this, new TreeViewExEventArgs(xx, this.toolTip));
}
}
protected override void OnDoubleClick(System.EventArgs e)
{
if (this.SelectedNode != null)
this.OnNodeDoubleClick(this.SelectedNode);
base.OnDoubleClick(e);
}
private System.Windows.Forms.ToolTip toolTip;
public TreeViewEx()
{
toolTip = new System.Windows.Forms.ToolTip();
this.toolTip.InitialDelay = 300;
this.toolTip.ReshowDelay = 0;
}
protected override void OnClick(System.EventArgs e)
{
if (this.GetNodeAt(System.Windows.Forms.TreeView.MousePosition.X, System.Windows.Forms.TreeView.MousePosition.Y) == null)
this.SelectedNode = null;
base.OnClick(e);
}
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
if (this.GetNodeAt(e.X, e.Y) == null)
this.SelectedNode = null;
base.OnMouseDown(e);
}
private System.Windows.Forms.TreeNode LastTreeNode;
protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
{
this.Cursor = System.Windows.Forms.Cursors.Default;
System.Windows.Forms.TreeNode treeNode;
treeNode = this.GetNodeAt(e.X, e.Y);
if (treeNode != null)
{
if ((System.Windows.Forms.Control.ModifierKeys & System.Windows.Forms.Keys.Control) != 0)
{
this.Cursor = System.Windows.Forms.Cursors.Hand;
if (treeNode != LastTreeNode | LastTreeNode == null)
{
LastTreeNode = treeNode;
this.toolTip.Active = false;
this.OnNodeShowToolTip(treeNode, this.toolTip);
this.toolTip.Active = true;
}
}
else
{
this.Cursor = System.Windows.Forms.Cursors.Default;
this.toolTip.Active = false;
}
}
else
{
this.Cursor = System.Windows.Forms.Cursors.Default;
this.toolTip.Active = false;
}
base.OnMouseMove(e);
}
}
public delegate void TreeViewExEventHandler(object sender, TreeViewExEventArgs e);
public class TreeViewExEventArgs : System.EventArgs
{
public TreeViewExEventArgs(System.Windows.Forms.TreeNode SelectedNode)
{
this.m_SelectedNode = SelectedNode;
}
public TreeViewExEventArgs(System.Windows.Forms.TreeNode Node, System.Windows.Forms.ToolTip NodeToolTip)
{
this.m_NodeToolTip = NodeToolTip;
this.m_Node = Node;
}
public TreeViewExEventArgs(System.Windows.Forms.TreeNode Node, string ToolTipText)
{
this.m_ToolTipText = ToolTipText;
}
private string m_ToolTipText;
private System.Windows.Forms.ToolTip m_NodeToolTip;
private System.Windows.Forms.TreeNode m_SelectedNode;
private System.Windows.Forms.TreeNode m_Node;
public System.Windows.Forms.TreeNode SelectedNode
{
get
{
return this.m_SelectedNode;
}
}
public string ToolTipText
{
get
{
return this.ToolTipText;
}
set { m_ToolTipText = value; }
}
public System.Windows.Forms.TreeNode Node
{
get
{
return this.m_Node;
}
}
public System.Windows.Forms.ToolTip NodeToolTip
{
get
{
return this.m_NodeToolTip;
}
}
}
public class TreeNodeEx : System.Windows.Forms.TreeNode
{
public int GetLevel()
{
int i = 0;
System.Windows.Forms.TreeNode xx = this.Parent;
while ((xx = xx.Parent) != null) i++;
return i;
}
}
//=================================================================
//调用示例
private TreeViewEx treeViewEx1;
private void Form1_Load(object sender, System.EventArgs e)
{
treeViewEx1 = new TreeViewEx();
this.Controls.Add(treeViewEx1);
treeViewEx1.HideSelection = false;
treeViewEx1.NodeDoubleClick += new TreeViewExEventHandler(treeViewEx1_NodeDoubleClick);
treeViewEx1.NodeShowToolTip += new TreeViewExEventHandler(this.treeViewEx1_NodeShowToolTip);
treeViewEx1.Nodes.AddRange(new System.Windows.Forms.TreeNode[]{
new System.Windows.Forms.TreeNode("Root",
new System.Windows.Forms.TreeNode[]
{new System.Windows.Forms.TreeNode("a"),new System.Windows.Forms.TreeNode("b")}
),
new System.Windows.Forms.TreeNode("Root1",
new System.Windows.Forms.TreeNode[]
{new System.Windows.Forms.TreeNode("a1"),new System.Windows.Forms.TreeNode("b1")}
)
}
);
}
public void treeViewEx1_NodeShowToolTip(object sender, TreeViewExEventArgs e)
{
e.NodeToolTip.SetToolTip(this.treeViewEx1, "[" + e.Node.Text + "]{");
}
private void treeViewEx1_NodeDoubleClick(object sender, TreeViewExEventArgs e)
{
if (e.SelectedNode.GetNodeCount(true) == 0)
System.Windows.Forms.MessageBox.Show(e.SelectedNode.Text);
}