TreeView

 

TreeView
 
TreeView 概述
TreeView 控件用于以节点形式显示文本或数据。
TreeView 控件由 System.Windows.Forms. TreeView 类来定义 ;
而其中的节点 ( Node) ,由 System.Windows.Forms. TreeNode 类来定义的。

所以当在程序中创建一个 TreeView 对象,其实只是创建了一个可以放置节点的 " 容器 " 。而在这个容器中加入一个节点,其实就是加入了从 TreeNode 类中创建的一个节点对象;同样删除一个节点,也就是删除一个 TreeNode 节点对象。
 
TreeView 主要属性:
Name :获取或设置控件的名称。
Nodes :获取分配给树视图控件的树节点集合。
Parent :获取或设置控件的父容器
Index :选定项的索引值
Tag :获取或设置包含有关控件的数据的对象
TopNode :获取树视图控件中第一个完全可见的树节点。
Text 指定节点显示的文本
SelectedNode
:当前被选择的节点
ExpandDepth:
指定默认情况下节点是否打开
Selected
:标明当前节点是否被选择的节点
ShowCheckBox : 标明当前节点是否显示复选框
CheckedNodes:声明被选择的单个或者多个节点
ShowCheckBoxes :声明是否显示复选框
ShowExpandCollapse :声明是否显示/折叠状态
ShowLines: 声明节点间是否以线连接
Checked:标明节点上的复选框的选择状态
HotTracking: 指示当鼠标指针移过树节点标签时,树节点标签是否具有超链接的外观。


TreeView
主要方法:
1 定位根节点:treeView1.SelectedNode=treeView1.Nodes[0]
2 展开所有节点:treeView.SelectedNode.ExpandAll();
3 燕尾服开选定节点的下一级节点:treeView1.SelectedNode.Expand()
4 折叠所有节点:treeView.SelectedNode.Collapse();
5 添加节点: tvw.Nodes.Add(new TreeNode(" 根节点" ));
6 删除当前选中节点:tvw.Nodes[0].Nodes[tvw.SelectedNode.Index].Remove();
7 删除指定索引位置上的节点:tvw.Nodes[0].Nodes.RemoveAt(0);

TreeView 主要事件:
AfterCheck:选定树节点旁边的复选框后触发
AfterCollapse:折叠树节点后触发
AfterExpand:展开树节点后触发
AfterSelect:选定树节点后触发
 
BeforeCheck: 在将要更改选定树节点旁边的复选框时触发
BeforeCollapse: 在将要折叠树节点时触发
BeforeExpand: 在将要展开树节点时触发
BeforeSelect: 在将要更改选定树节点时触发

 
 
例题:实现如下所示的功能
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  System.IO;

namespace  treeview
{
    
public partial class Form1 : Form
    
{
        
public Form1()
        
{
            InitializeComponent();
            FilltvwDirectory();
            LoadImageToComBox();
        }


        
/// <summary>
        
/// 向树tvw添加盘符
        
/// </summary>

        private void FilltvwDirectory()
        
{
            
//获取当前设备盘符,并添加到数组drivers[i]里面
            string[] drives = Environment.GetLogicalDrives();
            
for (int i = 0; i < drives.Length; i++)
            
{
                TreeNode cRoot 
= new TreeNode(drives[i]);
                
//TreeNode cRoot = new TreeNode();
                
//cRoot.Text = drives[i];

                tvwDirectory.Nodes.Add(cRoot);

                
//添加该盘符下的文件夹
                this.AddDirectories(cRoot);
            }

        }


        
/// <summary>
        
/// 添加该盘符下的文件夹
        
/// </summary>
        
/// <param name="node"></param>

        private void AddDirectories(TreeNode node)
        
{
            
try
            
{
                
//获取当前节点路径
                DirectoryInfo dir = new DirectoryInfo(GetPathFromNode(node));

                
//获取当前节点所在路径下的子文件夹
                DirectoryInfo[] e = dir.GetDirectories();

                
for (int i = 0; i < e.Length; i++)
                
{
                    
string name = e[i].Name;

                    
//判断是否是上级目录
                    if (!name.Equals("."&& !name.Equals(".."))
                    
{
                        node.Nodes.Add(
new TreeNode(name));
                    }

                }

            }

            
catch (Exception e)
            
{
                
// MessageBox.Show(e.Message);
            }

        }


        
/// <summary>
        
/// 递归调用产生节点对应文件夹的路径
        
/// </summary>
        
/// <param name="node"></param>
        
/// <returns></returns>

        private string GetPathFromNode(TreeNode node)
        
{
            
if (node.Parent == null)
            
{
                
return node.Text;
            }


            
//递归调用产生节点对应文件夹的路径
            
//Combine(string path1,string path2)合并两个路径字符中
            
//如Path.Combine("C:windows","Kugoo");则生成C:/windows/Kugkoo
            return Path.Combine(GetPathFromNode(node.Parent), node.Text);
        }


        
/// <summary>
        
/// ComBox的内容
        
/// </summary>

        private void LoadImageToComBox()
        
{
            cbxImageList.Items.AddRange(
new object[] "系统图像""图像A""图像B""图像C""图像D" });
        }


        
/// <summary>
        
/// 在将要展开树节点时触发的事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void tvwDirectory_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        
{
            TreeNode nodeExpanding 
= (TreeNode)e.Node;
            AddSubDirectories(nodeExpanding);
        }


        
/// <summary>
        
/// 调用AddDirectores()将该节点的子节点添加到树视图中该节点下
        
/// </summary>
        
/// <param name="node"></param>

        private void AddSubDirectories(TreeNode node)
        
{
            
for (int i = 0; i < node.Nodes.Count; i++)
            
{
                AddDirectories(node.Nodes[i]);
            }

        }


        
/// <summary>
        
/// 是否排序
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void chkOrder_Click(object sender, EventArgs e)
        
{
           
            
if (chkOrder.Checked == true)
            
{
                
this.tvwDirectory.Sort();
            }

            
else
            
{
                
this.tvwDirectory.Refresh();
            }

        }


        
/// <summary>
        
/// 是否显示复选框
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void chkCheckBox_Click(object sender, EventArgs e)
        
{
            
if (chkCheckBox.Checked == true)
            
{
                tvwDirectory.CheckBoxes 
= true;
            }

            
else
            
{
                tvwDirectory.CheckBoxes 
= false;
            }

        }


        
/// <summary>
        
/// 是否显示根级线
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void chkRootLine_Click(object sender, EventArgs e)
        
{
            
if (chkRootLine.Checked == true)
            
{
                tvwDirectory.ShowRootLines 
= true;
            }

            
else
            
{
                tvwDirectory.ShowRootLines 
= false;
            }

        }


        
/// <summary>
        
/// 是否显示同级线
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void chkLine_Click(object sender, EventArgs e)
        
{
            
if (chkLine.Checked == true)
            
{
                tvwDirectory.ShowLines 
= true;
            }

            
else
            
{
                tvwDirectory.ShowLines 
= false;
            }

        }


        
/// <summary>
        
/// 是否显示跟踪线
        
/// 指示当鼠标指针移过树节点标签时,树节点标签是否具有超链接的外观。
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void chkTrack_Click(object sender, EventArgs e)
        
{
            
if (chkTrack.Checked == true)
            
{
                tvwDirectory.HotTracking 
= true;
            }

            
else
            
{
                tvwDirectory.HotTracking 
= false;
            }

        }


        
/// <summary>
        
/// 是否显示+ -号
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void chkPlus_Click(object sender, EventArgs e)
        
{
            
if (chkPlus.Checked == true)
            
{
                tvwDirectory.ShowPlusMinus 
= true;
            }

            
else
            
{
                tvwDirectory.ShowPlusMinus 
= false;
            }

        }


        
private void chkHideState_Click(object sender, EventArgs e)
        
{
            
if (chkHideState.Checked == true)
            
{
                tvwDirectory.HideSelection 
= true;
            }

            
else
            
{
                tvwDirectory.HideSelection 
= false;
            }

        }


        
/// <summary>
        
/// mouse单击节点时发生
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void tvwDirectory_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        
{
            txtIndex.Text 
= tvwDirectory.SelectedNode.Index.ToString();
            txtText.Text 
= tvwDirectory.SelectedNode.Text.ToString();
        }


        
private void indentUpDown_ValueChanged(object sender, EventArgs e)
        
{
            
//设置indentUpDown中微调范围
            indentUpDown.Maximum = 250;
            indentUpDown.Minimum 
= 150;

            tvwDirectory.Width 
= int.Parse( indentUpDown.Value.ToString());
        }


        
/// <summary>
        
/// 为树设置图标
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void cbxImageList_SelectedIndexChanged(object sender, EventArgs e)
        
{
            
this.tvwDirectory.ImageList = this.tvwimgList;

            
if (cbxImageList.SelectedIndex == 1)
            
{
                
this.tvwDirectory.SelectedImageIndex = 0;
                
this.tvwDirectory.ImageIndex = 0;
            }
 else if(cbxImageList.SelectedIndex==2)
            
{
               
this.tvwDirectory.SelectedImageIndex = 1;
                
this.tvwDirectory.ImageIndex = 1;
            }
 else  if (cbxImageList.SelectedIndex == 3)
            
{
                
this.tvwDirectory.SelectedImageIndex = 2;
                
this.tvwDirectory.ImageIndex = 2;
            }

            
else if (cbxImageList.SelectedIndex == 4)
            
{
                
this.tvwDirectory.SelectedImageIndex = 3;
                
this.tvwDirectory.ImageIndex = 3;
            }

            
else
            
{
                
this.tvwDirectory.SelectedImageIndex = 5;
                
this.tvwDirectory.ImageIndex = 5;
            }

        }

    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值