TreeView 衍生類別: TreeViewEx 實現 NodeShowToolTip、NodeDoubleClick 事件

來源:互聯網
上載者:User
treeview // 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);
    }

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。