TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件

类别:.NET开发 点击:0 评论:0 推荐:

// [email protected] 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);
 }

本文地址:http://com.8s8s.com/it/it45545.htm