Winform 中 treeview 多选

来源:互联网 发布:medea软件 编辑:程序博客网 时间:2024/06/06 09:11

效果:


using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication3{    public partial class Form1 : Form    {        //存储选的值        public static string str = "";        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {            TreeViewForm tvf = new TreeViewForm();            //窗体起始位置            tvf.Location=new Point(button1.Location.X,button1.Location.Y);            tvf.Show();        }        private void button2_Click(object sender, EventArgs e)        {            MessageBox.Show(str.Substring(0,str.Length-1));                    }    }}

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication3{    public partial class TreeViewForm : Form    {        public TreeViewForm()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)        {            //建立一个父节点            TreeNode tn1= treeView1.Nodes.Add("名称");            tn1.Tag = 0;            //建立3个子节点            TreeNode ntn1 = new TreeNode("名称1");            ntn1.Tag = 1;            TreeNode ntn2 = new TreeNode("名称2");            ntn2.Tag = 2;            TreeNode ntn3 = new TreeNode("名称3");            ntn3.Tag = 3;            //将这3个子节点添加到父节点中            tn1.Nodes.Add(ntn1);            tn1.Nodes.Add(ntn2);            tn1.Nodes.Add(ntn3);            treeView1.CheckBoxes = true;            treeView1.ExpandAll();        }        /// <summary>        /// 获得选中节点        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void button1_Click(object sender, EventArgs e)        {            List<TreeNode> listNodes = new List<TreeNode>();            foreach (TreeNode node in treeView1.Nodes)            {                FindCheckNode(node, listNodes);            }            this.Close();        }        private void FindCheckNode(TreeNode node, List<TreeNode> listNodes)        {            if (node.Checked)            {                listNodes.Add(node);                //Form1.str += node.Text+",";                Form1.str += node.Tag + ",";            }            foreach (TreeNode childnode in node.Nodes)            {                FindCheckNode(childnode, listNodes);            }        }        /// <summary>        /// 选中取消节点        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)        {            if (e.Action == TreeViewAction.ByMouse)            {                //textBox1.Text = e.Node.Text;                if (e.Node.Checked)                {                    //取消节点选中状态之后,取消所有父节点的选中状态                    setChildNodeCheckedState(e.Node, true);                }                else                {                    //取消节点选中状态之后,取消所有父节点的选中状态                    setChildNodeCheckedState(e.Node, false);                    //如果节点存在父节点,取消父节点的选中状态                    if (e.Node.Parent != null)                    {                        setParentNodeCheckedState(e.Node, false);                    }                }            }        }        //取消节点选中状态之后,取消所有父节点的选中状态        private void setParentNodeCheckedState(TreeNode currNode, bool state)        {            TreeNode parentNode = currNode.Parent;            parentNode.Checked = state;            if (currNode.Parent.Parent != null)            {                setParentNodeCheckedState(currNode.Parent, state);            }        }        //选中节点之后,选中节点的所有子节点        private void setChildNodeCheckedState(TreeNode currNode, bool state)        {            TreeNodeCollection nodes = currNode.Nodes;            if (nodes.Count > 0)                foreach (TreeNode tn in nodes)                {                    tn.Checked = state;                    setChildNodeCheckedState(tn, state);                }        }    }}


0 0
原创粉丝点击