TREEVIEW拖拽对应修改目录

本文介绍如何使用 C# 实现 TreeView 控件的拖拽功能,包括添加目录、移动文件夹等操作,并展示了如何通过代码判断拖拽效果及更新视图。
 
 

TREEVIEW拖拽对应修改目录

 
 
 
using System.IO;
 
 
        private static string RootPath = @"D:\Administrator\Documents\TestData";
        //返回 D:\Administrator\Documents
        private string myPath = GetDirectoryParentPath(RootPath); 
        private void Form1_Load(object senderEventArgs e)
        {
            treeView1.AllowDrop = true;
            treeView1.HideSelection = false;
            DirectoryToTreeNode(RootPath,treeView1);
        }
 
 
//添加目录到TREEVIEW
       private void DirectoryToTreeNode(string RootDir TreeView treeView)
        {
            treeView.Nodes.Clear();
            DirectoryInfo di = new DirectoryInfo(RootDir );
            TreeNode rootNode = new TreeNode(di.Name);
            GetDirs(di.GetDirectories(), rootNode);
            treeView.Nodes.Add(rootNode);
            rootNode.Expand();
        }
 
       private void GetDirs(DirectoryInfo[] subDirsTreeNode treeNode)
        {
            foreach (DirectoryInfo d in subDirs)
            {
                TreeNode node = new TreeNode(d.Name, 0, 0);
                DirectoryInfo[] subSubDirs = d.GetDirectories();
                GetDirs(subSubDirsnode);
                treeNode.Nodes.Add(node);
            }
        }
 
 
 
   /*问题
            C:\Program Files\\\
            C:\Program Files///
         */
        private bool DirectoryExists(string path)
        {
            DirectoryInfo d = new DirectoryInfo(path);
            return d.Exists;
        }
 
       //目录 D:\Administrator\Documents\TestData
        //返回 D:\Administrator\Documents
        private static string GetDirectoryParentPath(string path)
        {
            DirectoryInfo d = new DirectoryInfo(path);
            return d.Parent.FullName;
        }
 
        //目录 D:\Administrator\Documents\TestData
        //返回 TestData
        private string ExtractDirectoryName(string path)
        {
            DirectoryInfo d = new DirectoryInfo(path);
            return d.Name;
        }
 
//移动文件夹
       //C:\Windows\a
    //C:\Windows\b
    //实际运行过程 Directory.Move( "C:\Windows\a" , "C:\Windows\b\a");
    private bool MoveDirectory(string sourceDirNamestring destDirName)
    {
        destDirName = String.Format("{0}\\{1}"destDirNameExtractDirectoryName(sourceDirName));
        //源目录存在 但目标目录不存在
        if (DirectoryExists(sourceDirName) && !DirectoryExists(destDirName)) 
        {
            Directory.Move(sourceDirNamedestDirName);
            //源目录不存在 但目标目录存在
            if (!DirectoryExists(sourceDirName) && DirectoryExists(destDirName)) 
                return true;
        }
        else
            return false;
        return false;
    }
 
 
 
 TreeView拖拽操作
       private void treeView1_DragOver(object senderDragEventArgs e)
        {
            TreeNode node2 = treeView1.GetNodeAt(treeView1.PointToClient(new Point(e.Xe.Y)));
            //节点2不存在
            //节点1 = 节点2
            //节点1 往它的父一级节点拖拽
            if ((node2 == null) ||(node1 == node2)|| (node1.Parent == node2))
            {
                treeView1.SelectedNode = node1;
                SetTreeNodeColorDefault();
                e.Effect = DragDropEffects.None;
                return;
            }
            else
            {
                e.Effect = DragDropEffects.Move;
                treeView1.SelectedNode = node2;
                SetTreeNodeColorBlue();
 
                //当一个父节点往它的子节点中拖拽时
                while (node2.Parent != null)
                {
                    if (node2.Parent == node1)
                    {
                        e.Effect = DragDropEffects.None;
                        return;
                    }
                    node2 = node2.Parent;
                }
            }
        }
 
        private void treeView1_DragDrop(object senderDragEventArgs e)
        {
            //拖拽的节点指向目标的 这个目标节点
            TreeNode node2 = treeView1.GetNodeAttreeView1.PointToClient(new Point(e.Xe.Y)) );
            if (node1 != node2)
            {
                if (node1.Parent != node2)
                {
                    string dir1 = myPath + "\\" + node1.FullPath;
                    string dir2 = myPath + "\\" + node2.FullPath;
 
                    textBox1.Text = dir1;
                    textBox2.Text = dir2;
                  
                    if (MoveDirectory(textBox1.TexttextBox2.Text))
                    {
                    //MessageBox.Show("Finished");
 
                        // Remove drag node from parent
                        if (node1.Parent == null)
                            treeView1.Nodes.Remove(node1);
                        else
                            node1.Parent.Nodes.Remove(node1);
                        node2.Nodes.Add(node1);
                        treeView1.SelectedNode = node1;
                        node2.Expand();
                    }
                    
                }
            }
        }
 
 设置节点颜色

          private   void  treeView1_MouseDown( object  senderMouseEventArgs e)
        {
 
            SetTreeNodeColorDefault();
        }
 
        private void SetTreeNodeColorBlue()
        {
            if (node1 != null)
            {
                node1.BackColor = Color.FromArgb(51, 153, 255);//蓝色 
                node1.ForeColor = Color.White;
            }
        }
 
        private void SetTreeNodeColorDefault()
        {
            if (node1 != null)
            {
                node1.BackColor = SystemColors.Window;
                node1.ForeColor = Color.Black;
            }
        }
 





附件列表

 

转载于:https://www.cnblogs.com/xe2011/p/3435666.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值