编程资料 - 剪贴板、拖放操作

上传人:xzh****18 文档编号:45733934 上传时间:2018-06-18 格式:PDF 页数:168 大小:1.62MB
返回 下载 相关 举报
编程资料 - 剪贴板、拖放操作_第1页
第1页 / 共168页
编程资料 - 剪贴板、拖放操作_第2页
第2页 / 共168页
编程资料 - 剪贴板、拖放操作_第3页
第3页 / 共168页
编程资料 - 剪贴板、拖放操作_第4页
第4页 / 共168页
编程资料 - 剪贴板、拖放操作_第5页
第5页 / 共168页
点击查看更多>>
资源描述

《编程资料 - 剪贴板、拖放操作》由会员分享,可在线阅读,更多相关《编程资料 - 剪贴板、拖放操作(168页珍藏版)》请在金锄头文库上搜索。

1、0H在在 VB.NET 应用程序中添加树视图拖放功能应用程序中添加树视图拖放功能 概要概要 本文分步演示了如何在 VB .NET 应用程序中的一个树视图控件中对树节点执行拖放操作。 技术说明技术说明 树视图控件提供了下面三个必须处理的拖放事件: ItemDrag:用户开始拖动树节点,就会从源树视图控件引发此事件。出现此事件时,请调用DoDragDrop 方法以启动拖放过程。 DragEnter:启动拖放操作后,必须在目标树视图控件中处理 DragEnter 事件。当用户将 TreeNode 对象从源树视图控件拖到目标树视图控件边界内的某一点时,会发生此事件。DragEnter 事件允许目标树视

2、图控件指定拖放操作对此控件是否有效。本文中的代码示例只允许执行移动操作。 DragDrop:要处理的最后一个事件是目标树视图控件的 DragDrop 事件。将拖动的 TreeNode 对象放到目标树视图控件上后, 会发生此事件。 要处理此事件, 请检索 TreeNode 对象,然后将该对象添加到目标树视图控件中。该代码示例使用 Data 对象来检索数据。 本文中的代码示例可确保已将一个 TreeNode 对象拖到目标树视图控件中。Data 对象的 GetData 方法可检索从源控件拖动的节点。GetNodeAt 方法可确定将此节点放到目标控件上的什么位置。确定此位置后,请添加源节点,使其作为目

3、标节点的子节点。由于本示例将执行一个移动操作,因此最后一步是从原始树视图控件中移除源节点。 创建示例的步骤创建示例的步骤 1. 在 VB .NET 中新建一个 Windows 应用程序。默认情况下将创建 Form1。 2. 使用工具箱将一个树视图控件添加到 Form1 中。TreeView1 在默认情况下被创建。 3. 要允许拖放树视图控件, 在“属性”窗口中, 将 TreeView1 的 AllowDrop 属性更改为 True。 4. 为 TreeView1 添加如下图所示的节点: 5. 添加下面的方法处理程序,以处理 TreeView1 的 ItemDrag 事件。此代码对当前拖动的项启

4、动一个移动操作。 用户开始拖动树节点,就会从源树视图控件引发此事件。出现此事件时,需调用 DoDragDrop 方法以启动拖放过程。 Private Sub TreeView1_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles TreeView1.ItemDrag DoDragDrop(e.Item, DragDropEffects.Move) End Sub 6. 添加下面的方法处理程序,以处理 TreeView1 的 DragEnter 事件: 启动拖放操作

5、后,必须在目标树视图控件中处理 DragEnter 事件。 当用户将 TreeNode 对象从源树视图控件拖到目标树视图控件边界内的某一点时, 会发生此事件。 Private Sub TreeView1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragEnter e.Effect:设置拖放操作中目标放置效果,DragDropEffects.Move 表示允许执行移动操作 e.Effect = DragDropEffects.Move En

6、d Sub 7. 添加下面的方法处理程序,以处理 TreeView1 的 DragDrop 事件: 要处理的最后一个事件是目标树视图控件的 DragDrop 事件。 将拖动的 TreeNode 对象放到目标树视图控件上后,会发生此事件。 Private Sub TreeView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragDrop Dim destinationNode, newNode As TreeNode 使用 Data 对象来

7、检索跟 DragDrop 事件相关的数据(e.Data) 方法 GetDataPresent() 确定跟 DragDrop 事件相关的数据是否是一个 TreeNode If (e.Data.GetDataPresent(“System.Windows.Forms.TreeNode“, False) Then 确定当前停止拖放的位置的工作区坐标: Dim pt As Point = CType(sender, TreeView).PointToClient(New Point(e.X, e.Y) 代码 CType(sender, TreeView) 中,变量 sender 包含触发事件的对象的引

8、用,而 CType 方法将其强制转换为 TreeView 类型 PointToClient 方法将指定屏幕点的位置计算成工作区坐标 检索位于指定位置的树节点: destinationNode = CType(sender, TreeView).GetNodeAt(pt) 使用 Data 对象的 GetData 方法可检索从源控件拖动的节点。 newNode = CType(e.Data.GetData(“System.Windows.Forms.TreeNode“, True), TreeNode) If (newNode.Parent Is Nothing) Then MessageBox.

9、Show(“请选择单个员工“, “错误“, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If If (destinationNode Is newNode.Parent) Then MessageBox.Show(“请将员工移至其他部门内“, “错误“, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If 判断目标节点是否是根节点: If (destinationNode.Parent Is Nothing) Then If (Not MessageBox.

10、Show(“确定将该员工转移到 “ this.richTextBox1.DragEnter += new DragEventHandler(RichTextBox1_DragEnter); this.richTextBox1.DragDrop += new DragEventHandler(RichTextBox1_DragDrop); 2Hvs.NET 里面实现文件的拖放里面实现文件的拖放 最近自己在写一个网络硬盘的Demo,功能上差不多都完成了,不过卡在对文件的拖进拖出了,就好像winamp那样可以从资源管理器等外部拖放歌曲进来,以及能够往外拖放文件。 于是四处找文章代码,包括比较流行的

11、使用win32 的几个API的方法(DragAcceptFiles,DragQueryFile,DragFinish)原文请见3Hhttp:/ 但是在VS.NET里面用C#实现起来都有些问题,拖动文件进来之后却触发不了时间,我把所有的msg show出来都没有WM_DROPFILES = 233 这个文件拖放消息。找了很久MSDN也没有得到解决。 偶然中翻到VS.NET中的MSDN帮助,居然搞定了从外拖进文件,其实是很简单的。设定需要接受拖放的AllowDrag = true, 然后设置其DragDrop以及DragEnter事件即可,代码如下 private void lvwListing_

12、DragDrop(object sender, System.Windows.Forms.DragEventArgs e) / Handle FileDrop data. if(e.Data.GetDataPresent(DataFormats.FileDrop) ) / Assign the file names to a string array, in / case the user has selected multiple files. string files = (string)e.Data.GetData(DataFormats.FileDrop); for (int i=0;

13、i= 0) dragData = (DataGridViewRow) dataGridView1.Rowsinfo.RowIndex; Size dragSize = SystemInformation.DragSize; dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragS ize.Width / 2), e.Y - (dragSize.Height / 2), dragSi ze); private void dataGridView1_MouseUp(object sender, MouseEventArgs e) /re

14、set dragBoxFromMouseDown = Rectangle.Empty; dragData = null; private void dataGridView1_MouseMove(object sender, MouseEventArgs e) if (e.Button dataGridView1.DoDragDrop(dragData, DragDropEffects.Copy); 最后使用中又发现一个问题. 就是不能用鼠标左键圈选单元格了. 这个该怎么处理呢? 这两个操作是有冲突的. 这里我们可以通过时间来控制. 即我们要求按下鼠标左键, 0.5 秒之后 拖动鼠标 就启 动

15、数据拖放. 否则就按默认的圈选单元格. 即增加一个变量,在 MouseDown 里面记录时间,在 MouseMove 里面判断时间差. 如果不够 0.5 秒就不启动数据拖放. .NET Windows 编程系列编程系列(9):.NET 程序交互程序交互 摘要:摘要: 在 Windows 编程中,用户输入(包括鼠标输入和键盘输入)是非常重要的一个话题。本节介绍如何处理用户输入、输入验证、Windows 程序中鼠标的托放功能、如何模拟用户输入等。 注:注:本系列节选于MSDN Webcasts上邵志东老师的7H.NET Windows编程系列课程,在8H我的Blog中整理发表,方便大家一同参考!此

16、系列相关资料请到9H这里下载。 本节主要内容:本节主要内容: 用户输入用户输入 键盘输入键盘输入 数据验证数据验证 鼠标输入鼠标输入 Windows 窗体中的托放功能窗体中的托放功能 如何模拟输入如何模拟输入 简易画图程序简易画图程序 一、用户输入一、用户输入 在 Windows 窗体中,用户输入以 Windows 消息的形式发送到应用程序。 一系列可重写的方法在应用程序、 窗体和控件级处理这些消息。 当这些方法接收到鼠标和键盘消息时,将引发相应的事件,可以处理这些事件来获取关于鼠标或键盘输入的信息。 在许多情况下,Windows 窗体应用程序可以仅仅通过处理这些事件来处理所有用户输入。 所有 Windows 窗体控件都继承一组与鼠标和键盘输入有关的事件。 二、键盘输入二、键盘输入 Windows 窗体

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号