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);
}
Contributors: FHL