拖放操作

拖 放 操 作 拖放操作

1.拖放操作

拖放操作 Drag and Drop 是两个窗口之间传递数据的一种手段

在这里插入图片描述

拖放操作两部分:拖Drag放Drop

几个术语:

源窗口: 发起拖拽 Start Drag
目标窗口: 接受拖放 Accept Drop
拖拽物: 即传输的数据 DataObject

大致了解拖放操作的意思 Drag and Drop
用来传递数据,相当于剪贴板操作

2.接受拖放

默认地,窗口控件不支持拖放操作

实例:添加一个面板,使其能够接受拖放

  • 1 设置AllowDrop为 True
  • 2 响应 Drop相关事件
    DragEnter拖放操作进入
    DragLeave拖放操作进入
    DragOver拖放操作降临(窗口内移动)
    DragDrop松手,接受拖放数据

void panel1_DragEnter (sender, e ) { }

有资源送来,接受or拒绝?|

接受此拖放:

e.Effect = DragDropEffects.All;

拒绝此拖放:

e.Effect = DragDropEffects.None;

void panel1_DragDrop(sender, e ) { }
用户已经松手,取得传递来的数据

if (e.Data.GetDataPresent(typeof(string))) { 
              string str = (string)e.Data.GetData(typeof(string));
              MessageBox.Show("数据: " + str);
            }

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Winform自定义控件
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.All;
        }

        private void Form1_DragOver(object sender, DragEventArgs e)
        {

        }

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(string))) { 
              string str = (string)e.Data.GetData(typeof(string));
              MessageBox.Show("数据: " + str);
            }
        }
        private void Form1_DragLeave(object sender, EventArgs e)
        {

        }

    }

}

在这里插入图片描述


接受拖放处理的3步:

1 设置AllowDrp为True
2 响应 DragEnter,接受/拒绝
3 响应DragDrop,取出数据并显示

3.拖放的数据类型

拖放的数据类型,常见的有:

  • 纯文本
  • 图片
  • 富文本/带格式文本
  • 超链接/文件路径等

观察拖放物中的数据类型

string[] formats = e.Data.GetFormats();
foreach(string fmt in formats)
{
	Console.WriteLine("格式: "+ fmt);
}

一般来说,应用程序只接受固定的类型
例如,

PhotoShop:接受图片数据/文件路径
Notepad:接受纯文本数据
Word:接受文本、HTML、图片、文件路径、超链接

DragEnter事件处理中,检查和判断数据类型

if(e.Data.GetDataPresent("System.String"))
{
e.Effect = DragDropEffects.All;
}

如果未设置,则e.Effect的默认值为None


4.复制与移动

拖放的操作类型:

  • None无操作
  • Copy 复制
  • Move移动
  • All任意

(1)一般地,拖放时按住CTRL键,表示复制
(2)在复制操作时,光标下方显示一个加号

5.接受文件拖放

将一个文本文件拖放到程序中,直接打开文件的内容
注意:这里仅支持文本文件


判断拖放的数据类型"FileDrop"

如果不确定格式,可以先打印检查一下

string[] formats = e.Data.GetFormats();
foreach(string fmt in formats)
{
	Console.WriteLine("格式:" +fmt);
}

取得拖拽的数据:

object dragData = e.Data.GetData("FileDrop");

WinForm内部已经对数据作了转换,转成C#里的类型如果不确定,可以单步调试检查一下

string[] files = (string[])dragData;

1 本例中,是对Form1添加的拖放支持
也可以对TextBox控件单独添加拖放支持

2 拖放文件时,实际传递的是文件路径信息,并没有把文件数据传过来I


6.接受图片拖放

实例:将一个图片拖放到程序中,并直接显示

注意,拖放的图片对象,不是图片文件可以从Word里拖一个图片出来测试


注意区分图片图片文件

  • 拖拽图片文件时,数据中是文件的路径
  • 拖拽图片时,数据时中是图片的内容字节

重点:文本的拖放、文件的拖放


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值