版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haoranhaoshi/article/details/82979097
NewTreeView.cs:
public class NewTreeView:TreeView
{
private bool isToggleIcon;//是否是切换图标模式
protected Font STFont;//二级和三级节点的字体
public bool IsToggleIcon
{
get
{
return isToggleIcon;
}
set
{
isToggleIcon = value;
}
}
public ZHTreeView()
{
this.isToggleIcon = true;
this.ShowLines = false;
this.FullRowSelect = true;
this.ShowPlusMinus = false;
this.ItemHeight = 32;
this.Font = new Font("宋体", 16, FontStyle.Bold);
this.STFont = new Font("宋体", 14, FontStyle.Regular);
}
protected override void OnAfterSelect(TreeViewEventArgs e)
{
//节点选中后触发
if (false == isToggleIcon)//图标分级效果
{
e.Node.SelectedImageIndex = e.Node.Level;//当前节点
TreeNodeCollection nodes = e.Node.Nodes;
foreach (TreeNode node in nodes)
{
node.ImageIndex = node.Level; //子节点
}
}
}
protected override void OnAfterExpand(TreeViewEventArgs e)
{
//节点展开后触发
if (true == isToggleIcon)//图标切换效果
{
//e.Node为展开后下一级的父节点
//切换模式下image0为展开前的图标,image1为展开后的图标
e.Node.SelectedImageIndex = 1;//展开后的图标
//SelectedImageIndex为选中期间的image索引,ImageIndex为不选状态下的image索引
e.Node.ImageIndex = 1;
//展开后的下一级节点
TreeNodeCollection nodes = e.Node.Nodes;
foreach (TreeNode node in nodes)
{
node.ImageIndex = 0;//展开前的图标
if (0 == node.Nodes.Count)//展开后的下一级节点是叶子节点
{
node.SelectedImageIndex = 2;//叶子节点图标
node.ImageIndex = 2;
}
}
e.Node.BackColor = this.BackColor;
}
//展开后设置下一级字体
TreeNodeCollection newNodes = e.Node.Nodes;
foreach (TreeNode newNode in newNodes)
{
newNode.NodeFont = STFont;
}
}
protected override void OnAfterCollapse(TreeViewEventArgs e)
{
//节点折叠后触发
if (true == isToggleIcon)//图标切换效果
{
//e.Node为被折叠一级节点的父节点
//切换模式下image0为折叠后的图标,image1为折叠前的图标
e.Node.SelectedImageIndex = 0;//折叠后的图标
e.Node.ImageIndex = 0;
}
}
}
1、添加节点:
for (int i = 0; i < 4; i++)
{
TreeNode node1 = treeView1.Nodes.Add("父亲" + i.ToString());
for (int j = 0; j < 3; j++)
{
TreeNode node2 = new TreeNode("儿子" + j.ToString());
node1.Nodes.Add(node2);
for (int p = 0; p < 2; p++)
{
TreeNode node3 = new TreeNode("孙子" + p.ToString());
node2.Nodes.Add(node3);
}
}
}
2、添加图标:
try
{
if (Image.FromFile(@"..\..\Resources\tree_NodeCollaps.png") != null)
{
imageList.Images.Add(Image.FromFile(@"..\..\Resources\tree_NodeCollaps.png"));
}
}
catch (Exception ex)
{
}
treeView1.ImageList = imageList;