// playyuer@Microshaoft.com invent
//一个 TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件
//1.实现了 NodeShowToolTip 事件,结合键盘 Ctrl 键显示及设置 ToolTipText
//2.实现了 NodeDoubleClick 事件,可在调用中只响应"叶子"节点
//3.点击 TreeView 空白处不选中任何节点
//Class1.cs
namespace Microshaoft
{
using System;
public class TreeViewEx : System.Windows.Forms.TreeView
{
public delegate void TreeViewExEventHandler(object sender,TreeViewExEventArgs e);
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 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;
}
}
}
//using System;
//测试====================
namespace WindowsApplication1
{
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microshaoft;
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(96, 112);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(88, 32);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
//=================================================================
//调用示例
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 TreeViewEx.TreeViewExEventHandler(treeViewEx1_NodeDoubleClick);
treeViewEx1.NodeShowToolTip += new TreeViewEx.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,"ToolTipText: [" + 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);
}
private void button1_Click(object sender, System.EventArgs e)
{
}
}
}
分享到:
相关推荐
C#开发,TreeView与DataGridView的整合的.EXE文件,与大家分享之
文件包括两个lib(ClassLib_CheckedComboBox,ClassLib_...其中DevExpress风格的实现了CheckComboBox与TreeView的结合,可以实现父节点、子节点的联动选择。需要Devexpress v8.2 分有点多,但绝对是好东西
一个实例工程,包括如何实现TreeView多选功能,如何绘制TreeNode底板、改变节点样式、绘制字体,如何在TreeNode后面添加Button按钮。
TreeView实现无限级分类 可以通过TreeView实现增删改查,数据库采用的是Access,操作采用OleDbHelper
3、指定鼠标左键只能拖拽好友节点,并且限制只能拖拽到分组节点上,完成后节点添加到同级节点末尾处,如需更改插入位置请改动事件中的index值; 4、拖拽完成后节点数据的分组属性被更改,为便于看到效果,窗体右侧...
考虑到这一点,highlight-treeview.js 提供了一个包含语言定义的类: treeview来处理指定的工作目录树。 使用 highlight-treeview 很简单。 将库与 highlight.js 提供的样式之一链接后,我们只需添加treeview.css...
JavaScript树\利用JavaScript实现树型结构的TreeView类JavaScript树\利用JavaScript实现树型结构的TreeView类JavaScript树\利用JavaScript实现树型结构的TreeView类JavaScript树\利用JavaScript实现树型结构的...
实现qt中的treeView中的右键的菜单栏的功能和双击效应,还必须大于50字,说了就这么多呀,还是不够,见谅,为了凑字
本实例完成了bootstrap TreeView的各种选择的事件触发,选中后打印出树节点的相关信息,包括单选,全选,父级和定位
binding-reactive-mvvm-treeview-xaamarin:如何在Xamarin.Forms TreeView(SfTreeView)中使用Reactive MVVM绑定数据-源码
c# 如何实现鼠标拖动TreeView节点.rarc# 如何实现鼠标拖动TreeView节点.rarc# 如何实现鼠标拖动TreeView节点.rarc# 如何实现鼠标拖动TreeView节点.rar
jQuery的高性能TreeView 源码 1:支持静态的树,即一次性将全部数据加载到客户端。 2:异步树,即一次只加载一级或若干级节点,子节点可以异步加载数据。 3:Checkbox树(可能是静态树也可能是异步树),用于选择...
TreeView 控件应用实例:将 TreeView 绑定到 Biblio.mdb 数据库
TreeView无限极分类导航 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等
c# treeview 添加节点后面button触发事件
本文实现了运用bootstrap treeview实现动态加载数据,并且添加快捷搜索功能,需要的朋友参考下
solidjs-treeview-component 参见
自己实现treeview,支持单选和多选,带checkbox,感兴趣的童鞋可以下载看看
用TreeView实现树菜单 用TreeView实现树菜单
用重载实现 treeview 的无限分类递归调用