C#拾遗(一)

在实际工作中用到的一些零碎的知识记录下来

1.拼接路径

有时需要调用路径,把某一个文件放在某处,拼接路径生成一个路径

放在执行目录下

 string Path = Path.Combine(Application.StartupPath, @"XXX.XXX");    
Application.StartupPath就是DEBUG目录下

2.TreeView添加树节点

TreeView是比较常用的控件

TreeNode Rootnode = new TreeNode();//声明一个根节点
treeView.Nodes.Add(Rootnode); //TreeView加载根节点
TreeNode[] Chlidnodes = new TreeNode[n]; //声明n的子节点
Chlidnodes[n] = new TreeNode();  生成一个新节点
Rootnode.Nodes.Add(Chlidnodes[n]); //加载

下面的代码只有一个TreeView控件的操作,其余的什么也没有,可以新建一个新的C#空工程,仅拖入一个TreeView控件测试与学习

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 TreeViewAgain
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //初始化节点,根节点为Root,子节点为Chlid1,Chlid2
        private void Form1_Load(object sender, EventArgs e)
        {
            TreeNode Root = new TreeNode();
            Root.Text = "Root";
            treeView1.Nodes.Add(Root);

            TreeNode[] ChlidNode = new TreeNode[2];
            ChlidNode[0] = new TreeNode();
            ChlidNode[0].Text = "Chlid1";
            Root.Nodes.Add(ChlidNode[0]);

            ChlidNode[1] = new TreeNode();
            ChlidNode[1].Text = "Chlid2";
            Root.Nodes.Add(ChlidNode[1]);
            treeView1.ExpandAll();//展开
            Root.Checked = true;
            SetChlid(Root);
        }

        //子节点逻辑判断,点击父节点,子节点的逻辑判断很简单,子节点的勾选状态与父节点一致即可
        private void SetChlid(TreeNode Node)
        {
            foreach (TreeNode child in Node.Nodes)
            {
                child.Checked = Node.Checked; <span style="white-space:pre">	</span>//子节点状态等于父节点状态,父节点勾选,子节点全部勾选,父节点取消勾选,子节点全部取消勾选
                SetChlid(child);                //递归遍历子节点
            }
        }

        //父节点逻辑判断,父节点逻辑判断略麻烦,先遍历所有子节点,如果至少有一个子节点勾选,则父节点勾选,子节点全部取消勾选,父节点取消勾选
        private void SetParent(TreeNode Node)
        {
            if (Node.Parent != null)
            {
                if (Node.Checked)
                {
                    Node.Parent.Checked = true;
                    return;
                }
                else
                {
                    foreach (TreeNode Brother in Node.Parent.Nodes)
                    {
                        if (Brother.Checked == false)
                            continue;
                        else
                            return;                            
                    }
                    Node.Parent.Checked = false;
                }
            }          
        }

        //CheckBox节点
        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown)
            {
                SetChlid(e.Node);
                SetParent(e.Node);
            }
        }

        List<string> m_SubNode = new List<string>();             //存储所有子节点
        List<string> m_SubCheckNode = new List<string>();        //存储所有勾选的子节点
        List<string> m_SubUnCheckNode = new List<string>();      //<span style="font-family: Arial, Helvetica, sans-serif;">存储所有未勾选的子节点</span>


        //存储所有子节点
        private List<string> Savenode(TreeNode Node)
        {          
            foreach (TreeNode Chlid in Node.Nodes)
            {
                m_SubNode.Add(Chlid.Text);
                Savenode(Chlid);
            }
            return m_SubNode;
        }

        //存储未勾选子节点
        private List<string> SaveUnchecknode(TreeNode Node)
        {
            foreach (TreeNode Chlid in Node.Nodes)
            {
                if (Chlid.Checked == false)
                {
                    m_SubNode.Add(Chlid.Text);
                    Savenode(Chlid);
                }
            }
            return m_SubUnCheckNode;
        }

        //存储勾选子节点
        private List<string> Savechecknode(TreeNode Node)
        {
            foreach (TreeNode Chlid in Node.Nodes)
            {
                if (Chlid.Checked == true)
                {
                    m_SubNode.Add(Chlid.Text);
                    Savenode(Chlid);
                }
            }
            return m_SubCheckNode;
        }   
        
        //点击节点
        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {           
            m_SubNode.Clear();
            m_SubCheckNode.Clear();
            m_SubUnCheckNode.Clear();
            Savenode(e.Node);         
            Savechecknode(e.Node);
            SaveUnchecknode(e.Node);
        }
    }
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值