`

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

 
阅读更多

// 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)
{

}
}
}

分享到:
评论

相关推荐

    treeView与DataGridView整合实例

    1. **事件处理**:当用户在`TreeView`中选择一个节点时,需要捕获相应的事件(如`NodeMouseClick`或`AfterSelect`),然后触发对应的动作,比如填充`DataGridView`。 2. **数据绑定**:`DataGridView`通常需要与...

    TreeviewEx

    【TreeviewEx】是一个在WPF(Windows Presentation Foundation)环境中实现的高级树形视图控件,它扩展了默认的WPF TreeView功能,提供了一种类似于Visual Studio的交互体验。当你在TreeviewEx中选择一个节点时,...

    qt中的treeView的右击事件和双击事件

    在Qt编程中,`QTreeView`是一个非常重要的控件,用于显示树形数据结构,例如文件系统、组织结构等。...在`TreeView_demo`的压缩包文件中,你可能会找到一个完整的示例程序,包括了这些功能的实现,供你参考学习。

    DevExpress+TreeView风格和WinForm风格的CheckComboBox

    文件包括两个lib(ClassLib_CheckedComboBox,ClassLib_...其中DevExpress风格的实现了CheckComboBox与TreeView的结合,可以实现父节点、子节点的联动选择。需要Devexpress v8.2 分有点多,但绝对是好东西

    TreeView实现无限级分类

    这个场景中,我们讨论的重点是如何利用TreeView控件来实现无限级分类,同时结合Access数据库进行数据操作,如增、删、改、查。下面我们将深入探讨这两个核心知识点。 1. TreeView控件无限级分类的实现: - ...

    Winform自定义绘制TreeView及实现多选功能

    总之,自定义绘制`Winform`中的`TreeView`控件以及实现多选功能,需要对控件的事件处理、绘制机制以及控件扩展有深入的理解。通过上述步骤,我们可以创建出更加个性化的用户界面,提升应用程序的用户体验。

    bootstrap TreeView全选单选,定位选触发事件实例

    在“bootstrap TreeView全选单选,定位选触发事件实例”中,我们将深入探讨如何实现这个组件的多种选择功能,包括单选、全选以及通过父节点控制子节点的选择,并讨论当选择状态改变时如何触发相关事件。 1. **全选...

    wpf mvvm treeview 动态加载(实现重命名与右键添加)

    在本文中,我们将深入探讨如何在WPF应用中利用MVVM模式动态加载并管理TreeView,同时实现节点的重命名和右键菜单功能。WPF(Windows Presentation Foundation)是微软提供的一个用于构建桌面应用程序的框架,而MVVM...

    bootstrap-treeview树节点实现动态加载(懒加载)

    本项目在官方Bootstrap Treeview的基础上进行了扩展,实现了懒加载功能。这意味着当用户首次访问树形视图时,只会加载根节点,当用户展开某个节点时,该节点的子节点才会在后台请求数据并动态添加到视图中。这样,...

    jquery实现的一个treeview效果

    下面我们将深入探讨jQuery Treeview的基本概念、实现原理以及使用方法。 首先,jQuery Treeview是一个插件,它扩展了jQuery的功能,允许开发者将HTML表格或无序列表转换为具有折叠/展开功能的树状视图。这个插件...

    自己实现treeview,支持单选和多选

    首先,我们需要了解`Qt`中的`QTreeView`类,它是`QWidget`的子类,用于显示由`QAbstractItemModel`派生的模型数据。在这个自定义实现中,我们将扩展`QTreeView`,添加单选和多选的功能。 **单选与多选机制:** - ...

    C# ASP.NET TreeView click 事件

    通过捕获`TreeNodeClick`事件,我们可以实现对用户点击行为的响应,从而构建动态且交互性强的Web应用程序。在实际项目中,你可能需要根据具体需求进行更多的定制和优化,但以上基础已经足以让你开始使用`TreeView`...

    树控件 TreeView Shift Ctrl 实现多选功能 动态操作树控件

    - 对于.NET框架,如C#,可以使用TreeView控件,结合SelectedNodeChanged事件和键盘事件处理,实现多选功能。 在提供的"MultiSelectTreeView"文件中,可能包含了实现上述功能的示例代码或资源,你可以通过查看和...

    安卓树形控件相关-用treeview实现树形列表可实现多级扩展.rar

    2. 第三方库android-treeview: 这个资源可能使用了android-treeview库,这是一个开源项目,用于在Android上实现类似于iOS UITableView的树形视图。它提供了一个可自定义的TreeView类,允许开发者创建可展开/折叠的...

    TreeView绑定和ProgressBar进度条实现实例

    在本文中,我们将深入探讨如何在Windows Forms或WPF应用中实现`TreeView`控件的多级节点绑定以及`ProgressBar`控件的功能,并将两者结合使用。`TreeView`控件通常用于显示层次结构数据,而`ProgressBar`则用于表示一...

    qml中treeview用法

    `TreeView`的数据模型可以是任何实现了`QAbstractItemModel`接口的对象,如`ListModel`或`TreeModel`。`ListModel`适用于扁平结构,而`TreeModel`适合层级结构。创建一个简单的`ListModel`如下: ```qml import Qt...

    jQuery Treeview异步树实现

    在这个异步树实现中,我们专注于如何在jQuery Treeview中集成异步加载功能,特别是与.NET 3.5及以上版本的后端接口协同工作。 异步加载对于大型数据集至关重要,因为它允许用户逐步加载数据,而不是一次性加载所有...

    用TREEVIEW实现下拉菜单

    "用TREEVIEW实现下拉菜单" TREEVIEW控件是Windows Forms和ASP.NET中的一个常用控件,用于显示树形结构的数据。下面将详细讲解如何使用TREEVIEW控件实现下拉菜单。 一、数据库设计 在实现TREEVIEW控件之前,我们...

    Delphi中快速实现数据库树形结构并实现Treeview导航表数据

    在本教程中,我们将探讨如何快速地在Delphi中实现这样的功能,利用TreeView组件来导航数据库表的数据。我们将重点关注以下几个方面: 1. **数据库连接与查询**:首先,我们需要连接到数据库。在Delphi中,可以使用...

    TreeView+MVVM实现“多选”

    在本文中,我们将深入探讨如何使用MVVM(Model-View-ViewModel)模式和依赖属性来实现WPF(Windows Presentation Foundation)中的TreeView控件的多选功能。MVVM是一种设计模式,它鼓励分离关注点,使应用程序更易于...

Global site tag (gtag.js) - Google Analytics