• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
Windows窗体控件开发示例:扩展TreeView
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
Windows窗体控件开发示例:扩展TreeView
软件发布 Windows窗体控件开发示例:扩展TreeView
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 编程技术 >> C#教程 >> Windows窗体控件开发示例:扩展TreeView

Windows窗体控件开发示例:扩展TreeView

添加时间: 2007-7-11 2:17:44  作者: C#教程  阅读次数:314   来源: http://www.d9soft.com

       

 将 DataSource 转变为树
  编写完数据绑定代码后,我可以继续添加管理分组级别的代码,相应地生成树,然后添加一些自定义事件、方法和属性。

  管理组
  程序员要配置组集合,就必须创建 AddGroup、RemoveGroup 和 ClearGroups 函数。每当修改组集合时,都必须重新绘制树(以反映新配置),因此我创建了一个通用过程 GroupingChanged,当情况发生变化,需要强制重建树时,它可以由控件中的各种代码调用:

Private treeGroups As New ArrayList()
Public Sub RemoveGroup(ByVal group As Group)
If Not treeGroups.Contains(group) Then
treeGroups.Remove(group)
GroupingChanged()
End If
End Sub

Public Overloads Sub AddGroup(ByVal group As Group)
Try
treeGroups.Add(group)
GroupingChanged()
Catch
End Try
End Sub

Public Overloads Sub AddGroup(ByVal name As String, _
ByVal grouPBy As String, _
ByVal displayMember As String, _
ByVal valueMember As String, _
ByVal imageIndex As Integer, _
ByVal selectedImageIndex As Integer)
Dim myNewGroup As New Group(name, groupBy, _
displayMember, valueMember, _
imageIndex, selectedImageIndex)
Me.AddGroup(myNewGroup)
End Sub


Public Function GetGroups() As Group()
Return CType(treeGroups.ToArray(GetType(Group)), Group())
End Function
 

  生成树
  树的实际重建由一对过程来完成:BuildTree 和 AddNodes。由于这两个过程的代码太长,本文并未全部列出,而是尽量概括它们的行为(当然,如果愿意您可以下载完整的代码)。如前所述,程序员可以通过设置一系列组与该控件进行交互,然后在 BuildTree 中使用这些组来确定如何设置树节点。BuildTree 清除当前节点集合,然后遍历整个数据源来处理第一级分组(本文前面的示例和图解中提到的 Publisher),为每个不同的分组值添加一个节点(使用示例中的数据,为每个 pub_id 值添加一个节点),然后调用 AddNodes 来填充第一级分组下的所有节点。AddNodes 递归调用自身以处理任意多的级数,必要时可添加组节点和叶节点。使用两个基于 TreeNode 的自定义类以区别组节点和叶节点,并为两类节点提供各自相应的属性。

  自定义 TreeView 事件
  每当选择一个节点时,TreeView 都会引发两个事件:BeforeSelect 和 AfterSelect。但在我的控件中,我想使组节点和叶节点的事件不同,于是便添加了自己的事件 BeforeGroupSelect/AfterGroupSelect 和 BeforeLeafSelect/AfterLeafSelect,除基本事件外,还引发了自定义事件参数类:

Public Event BeforeGroupSelect _
(ByVal sender As Object, ByVal e As groupTreeViewCancelEventArgs)
Public Event AfterGroupSelect _
(ByVal sender As Object, ByVal e As groupTreeViewEventArgs)
Public Event BeforeLeafSelect _
(ByVal sender As Object, ByVal e As leafTreeViewCancelEventArgs)
Public Event AfterLeafSelect _
(ByVal sender As Object, ByVal e As leafTreeViewEventArgs)
Protected Overrides Sub OnBeforeSelect _
(ByVal e As System.Windows.Forms.TreeViewCancelEventArgs)
If TypeOf e.Node Is TreeGroupNode Then
Dim groupArgs As New groupTreeViewCancelEventArgs(e)
RaiseEvent BeforeGroupSelect(CObj(Me), groupArgs)
ElseIf TypeOf e.Node Is TreeLeafNode Then
Dim leafArgs As New leafTreeViewCancelEventArgs(e)
RaiseEvent BeforeLeafSelect(CObj(Me), leafArgs)
End If
MyBase.OnBeforeSelect(e)
End Sub

Protected Overrides Sub OnAfterSelect _
(ByVal e As System.Windows.Forms.TreeViewEventArgs)
Dim tln As TreeLeafNode
If TypeOf e.Node Is TreeGroupNode Then
tln = FindFirstLeafNode(e.Node)
Dim groupArgs As New groupTreeViewEventArgs(e)
RaiseEvent AfterGroupSelect(CObj(Me), groupArgs)
ElseIf TypeOf e.Node Is TreeLeafNode Then
Dim leafArgs As New leafTreeViewEventArgs(e)
RaiseEvent AfterLeafSelect(CObj(Me), leafArgs)
tln = CType(e.Node, TreeLeafNode)
End If

If Not tln Is Nothing Then
If cm.Position <> tln.Position Then
cm.Position = tln.Position
End If
End If
MyBase.OnAfterSelect(e)
End Sub
 

  自定义节点类(TreeLeafNode 和 TreeGroupNode)和自定义事件参数类均包括在可下载代码中。

  示例应用程序
  要全面理解本示例控件中的所有代码,您应该了解它在应用程序中的运行情况。包含的示例应用程序使用 pubs.mdb Access 数据库,并说明 Tree  控件如何与其他数据绑定控件一起创建 Windows 应用程序。本例中,尤其值得注意的主要功能包括树与其他绑定控件的同步以及对数据源执行搜索时树节点的自动选择。

注意:本示例应用程序(名为“TheSample”)包含在本文的下载中。


图 4:数据绑定 TreeView 的演示应用程序

  小结
  本文介绍的数据绑定 Tree 控件并非适用于所有需要 Tree  控件来显示数据库信息的项目,但它确实介绍了一种可针对个人目的自定义该控件的方法。请记住,您要生成的任何复杂数据绑定控件与 Tree 控件的大部分代码基本相同,您可以通过修改现有代码来简化以后的控件开发过程。

 

上下文章:

 

上一篇文章: C#数据库事务原理及实践(上) 下一篇文章: 用C#实现木马程序

相关文章:

  • Windows 7用户界面与互动模式
  • Windows操作系统的发展简史
  • Windows 7内置定位服务引发安全疑虑
  • Windows7 演变中的故障诊断特性
  • Windows Vista的安全性高过XP七倍

相关软件:

  • Windows优化大师 v8.0 Build 8.1105 标准版
  • Windows优化大师 v7.78 Build 7.1119 繁体中文版
  • Windows优化大师 v8.0 Build 8.1105 免费版
  • eDonkey2000 Client for Windows V1.4.6
  • Windows木马清道夫 2008 11.3 Build 1017 上网必备版
  • VMware Workstation for Windows V5.5.2 Build 29772

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • ADO.NET的开发场景及传统ADO的处理
  • 利用Visual C#实现Window管道技术
  • C#取得汉字的拼音的首字母
  • 使用C#编写DES加密程序的framework
  • Visual C#编写3D游戏框架示例
  • 用C#和本地Windows API操纵系统菜...
  • 在C#程序设计中使用Win32类库
  • Visual C#中调用Windows服务初探
  • 如何在C#的WinForm中制作饼状图和...
  • C#中实现DataGrid双向排序

C#教程阅读排行

  • 如何在C#的WinForm中制作饼状图和...
  • 浅析C#中图形编程
  • 用C#和本地Windows API操纵系统菜...
  • 彻底剖析C# 2.0泛型类的创建和使用
  • 使用C#编写DES加密程序的framework
  • C#如何在Form中嵌入并且操作Excel...
  • Visual C#中调用Windows服务初探
  • Visual C# 2005实现控件中捕获按键
  • C#中利用mediaplayer打造mp3播放器
  • Visual C#编写3D游戏框架示例

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • VC++之List Box/Check List Box控...
  • 第二章 PowerBuilder 入门之创建新...
  • VC++ List Ctrl控件
  • 第一章 什么是PowerBuilder
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有