treeview 跨窗体拖拽功能的实现(一)

article/2025/9/23 20:51:28

功能实现:

1.从工具窗体往任务窗体拖拽;

2.在任务窗体中改变节点的顺序;

3.右键复制节点,删除节点

工具窗体treeview1,:

涉及使用的事件:DragEnter,  DragOver ,ItemDrag, NodeMouseDoubleClick,

任务窗口treeview2:

使用的事件:DragEnter,DragOver,ItemDrag,DragDrop

DragEnter与treeview1一样;

DragOver与treeview2一样;

ItemDrag  与treeview1一样,tree_ItemDrag(treeview2, e, 120, -30);然后刷新树形控件,进行Refresh()

最关键的是任务窗口(目标窗体)的DragDrop

 private void treeView2_DragDrop(object sender, DragEventArgs e){//ClsMain.tree_DragDrop(sender, e);//获得拖放中的节点TreeNode moveNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));// // e.Data.GetData("System.Windows.Forms.TreeNode");//根据鼠标坐标确定要移动到的目标节点Point pt;TreeNode targeNode;pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));targeNode = this.treeView2.GetNodeAt(pt);TreeNode NewMoveNode = new TreeNode(moveNode.Text);if (targeNode != null)//如果目标节点未选中,则添加到一级节点{targeNode.Nodes.Add(NewMoveNode);//更新当前拖动的节点选择treeView2.SelectedNode = NewMoveNode;//展开目标节点,便于显示拖放效果targeNode.Expand();treeView2.Refresh();}else{this.treeView2.Nodes.Add(NewMoveNode);//更新当前拖动的节点选择treeView2.SelectedNode = NewMoveNode;//展开目标节点,便于显示拖放效果treeView2.ExpandAll();treeView2.Refresh();}}

1.comctl32.dll文件存储在电脑中“C:/Windows/System32”文件夹下

2.DllImport的基本使用
DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出函数的必要调用信息。

其中,引入到C#中的只能是非托管dll中的方法(或者说函数),而不能是数据(或者说变量)

(1)引入命名空间
using System.Runtime.InteropServices;
 (2)创建函数名称
[DllImport("demo.dll")]
public static extern bool OpenDemo();
其中:

修饰符static和extern是必不可少的(extern外部修饰符,常与DllImport属性一起使用,用于支持在外部实现方法)

最少要提供包含入口点的dll的名称


非常重要的外部参考:在Winform中从外部拖动节点到树形结构https://www.cnblogs.com/mjsn/p/6150909.html

在进行拖放操作之前,必须要对进行拖放操作的组件的"AllowDrop"属性值设定为"True",因为此属性是确定组件是否可以进行拖放操作的。  我们会用到三种事件:"ItemDrag"、"DragEnter"、"DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"ItemDrag"事件;当拖动数据进入目标组件区域触发"DragEnter"事件;当用户在目标组件区域放置拖动的数据触发"DragDrop"事件。实现代码如下:
private void listView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)2         {3             this.DoDragDrop(e.Item,DragDropEffects.Move);4         }5 6         private void listView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)7         {8             e.Effect=DragDropEffects.Move;9         }
10 
11         private void treeView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
12         {
13             //判定是否现在拖动的数据是LISTVIEW项
14             ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); 
15             if (lvi != null) 
16             { 
17                 e.Effect = DragDropEffects.Move; 
18             } 
19             else 
20                 Cursor = Cursors.No; 
21 
22         }
23         private void treeView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
24         {
25             //获得拖放中的项
26             ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); 
27 
28             //根据鼠标坐标确定要移动到的目标节点
29             Point pt;
30             TreeNode targeNode;
31             pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
32             targeNode = this.treeView1.GetNodeAt(pt);
33             TreeNode NewMoveNode  =new TreeNode(lvi.Text);
34             if(targeNode!=null)//如果目标节点未选中,则添加到一级节点
35             {
36                 targeNode.Nodes.Add(NewMoveNode);
37                 //更新当前拖动的节点选择
38                 treeView1.SelectedNode = NewMoveNode;
39                 //展开目标节点,便于显示拖放效果
40                 targeNode.Expand();
41                 treeView1.Refresh();
42             }
43             else
44             {
45                 this.treeView1.Nodes.Add(NewMoveNode);
46                 //更新当前拖动的节点选择
47                 treeView1.SelectedNode = NewMoveNode;
48                 //展开目标节点,便于显示拖放效果
49                 treeView1.ExpandAll();
50                 treeView1.Refresh();
51             }
52 
53             
54         }

以上第一部分功能:窗体间treeview节点功能拖拽实现


http://chatgpt.dhexx.cn/article/Rr1EvClM.shtml

相关文章

Virtual Treeview 安装以及入门

Virtual Treeview是一套Delphi下优秀的VCL控件,代码质量高,使用灵活、功能强大、性能非常好,可以用于表达Treeview和表格类数据。它的代码现在托管在google code上。 Virtual Treeview是一个“纯VCL”控件,这意味着它不是基于任何…

android treeview 树形结构,前端开发中,使用TreeView控件创建树形结构

原标题:前端开发中,使用TreeView控件创建树形结构 Wijmo是一款使用Type编写的新一代Java/HTML5控件集。它秉承触控优先的设计理念,在全球率先支持AngularJS,并提供性能卓越、零依赖的FlexGrid和图表等多个控件。 我们已经知道在Wi…

透透彻彻了解服务器技术

什么是服务器   服务器是一种高性能计算机,作为网络的节点,存储、处理网络上80%的数据、信息,因此也被称为网络的灵魂。做一个形象的比喻:服务器就像是邮局的交换机,而微机、笔记本、PDA、手机等固定或移…

服务器的介绍

一 、IDC/机柜/物理server/云主机介绍 1.互联网数据中心 (Internet Data Center) 互联网数据中心图片 (1)IDC的简介 简称IDC,是电信部门利用已有的互联网通信线路、带宽资源,建立的标准化电信专业级机房环…

web服务器(技术讲解)

2.Web服务器(技术讲解) 1.ASP 微软:国内最早流行在HTML中嵌入了VB脚本,ASPCOM在ASP开发中,基本一个页面有几千行的业务代码,页面杂乱,维护成本非常高 2.PHP 开发速度很快,功能强…

关于服务器

初始服务器 云操作 以下是重装系统操作 出现黑窗口后: 输入—>sudo passwd命令–>输入密码(密码不可见)–>再次输入密码(密码不可见)–>su命令(可使用root用户)–>输入密码&…

云服务器简介

云服务器简介 一、云服务器二、云服务的灵魂——虚拟化三、云服务器ECS概念 一、云服务器 1、云服务器简介 云计算服务器又称为云服务器或云主机,是云计算服务体系中的一项主机产品,它有效地解决了传统物理主机与VPS服务中,存在的管理难度打…

服务器概述

1、什么是服务器? 服务器:分为服务器硬件和服务器软件。在硬件服务器(计算机)上安装服务器软件,才可以对外提供服务。 比如:让其他的计算机访问当前服务器,为其他的计算机提供服务。 &#xff…

服务器技术(三)--Nginx

Nginx介绍 Nginx是什么、适用场景 Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。 Nginx专为性能优化而开发,性能是其最重要的考量&#xf…

2022年,服务器领域十大技术趋势

2020年,疫情的全球爆发对上半年服务器市场的出货量带来了不小的影响。但是随着下半年疫情逐渐得到控制以及数字化需求的激增,全球服务器市场呈现出非常不错的增长态势。 目前来看,服务器依然是数字化转型和云计算、互联网等技术发展基础&…

服务器端技术

简介: 服务器分为web服务器和应用服务器。Web服务器是离客户端最近的服务器,负责监听和处理HTTP请求。应用服务器比web服务器更靠近后端,主要处理复杂的业务逻辑和数据库的访问。 如果是静态资源(例如HTML页面或图片)…

云计算服务器技术概述

云计算服务器技术概述 概述 云主机也叫云服务器ECS (Elastic Compute Server),是一种按需获取的云端服务器,提供高可靠、弹性扩展的计算资源服务,可以根据需求选择不同规格的CPU、内存、操作系统、硬盘和网络来创建云主机,满足个性…

什么是服务器 ?服务器常见的系统和技术有哪些?

就像他的名字一样,服务器在网络上为不同用户提供不同内容的信息、资料和文件。可以说服务器就是Internet网络上的资源仓库,正是因为有着种类繁多数量庞大内容丰富的服务器的存在,才使得Internet如此的绚丽多彩。 服务器的种类和功能: (1) WW…

“东数西算”下数据中心的液冷GPU服务器如何发展?

以云计算、大数据、人工智能、高性能计算、数据分析、数据挖掘等为首的新兴技术凭借其优越的便利性和稳定性开始为服务器市场带来新的生机活力,其中以GPU为首的AI服务器在一定程度上不仅重构现行的产业结构,也为整个市场带来了新的有效增量。那么服务器的…

服务器技术基础

服务器技术基础 服务器是计算机的一种,比普通计算机运行更快、负载更高、价格更贵。服务器在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务。服务器具有高速的CPU运算能力、长时间的可靠运行…

1、NetBIOS简介

“网络基本输入/输出系统” (Network Basic Input/Output System, NetBIOS)是一种标准的应用程序编程接口(A P I),1983年由Sytek公司专为IBM开发成功。NetBIOS为网络通信定义了一种编程接口,但却…

NetBIOS初步了解

NetBIOS定义及作用 NetBIOS:是Network Basic Input/Output System的简称,一般指用于局域网通信的一套API。作用是为了给局域网提供网络以及其他特殊功能,系统可以利用WINS服务、广播及Lmhost文件等多种模式将主机名解析为相应IP地址&#xf…

BIOS 常用网站 (持续更新中)

UEFI 官网 下载UEFI/PI/ACPI 等SPEC Welcome to Unified Extensible Firmware Interface Forum | Unified Extensible Firmware Interface Forumhttps://uefi.org/ AMD资料 (需账号权限) 下载AMD芯片资料 Login – AMD DevHubhttps://devhub.amd.com/ Rw工具 OS下读取寄存…

更改netbios计算机名,NetBIOS主机名解析

原创]NetBIOS主机名解析 NetBIOS主机名解析主要使用其子协议NetBIOS Name Service协议来进行。 工作组:是网络中具有相同“Workgroup”名字的主机组成。用户可以修改此组名子加入另一个组。 属于同一个工作组的主机才能相互通告主机名,不同的工作组之间不…

浅谈netbios

Netbios想必大家都有接触。对于netbios的理解,我以前有很多困惑,不知道如何掌握这些知识点,这几天通过了一段时间的实验和学习,有了一些体会,和大家一起分享。 阅读本文,你可以了解到以下内容 ◆netbios的…