C# 实现托拉拽获取数据

C# 实现托拉拽获取数据

在C#中要想实现此功能,大致流程如下:

  1. 数据获取,利用事件触发获取数据。
  2. 复制数据,确认数据的复制方式,并对复制的数据格式和应用程序做兼容性确认。
  3. 读取数据,根据需求,将数据显示在对应位置。

数据获取主要通过事件DragEventArgs 来触发,DragEventArgs 类主要为 DragDropDragEnterDragOver 事件提供数据。

复制数据包括确认数据的复制方式和数据格式。复制方式包括复制、移动、复制数据链接等,主要通过DragDropEffects 枚举实现。其中复制的数据保存在DragEventArgs.Data 中。数据格式确认其实就是对DragEventArgs.Data 中的数据进行确认,这里会用到DataObject.GetData 方法和DataFormats 类的操作。

读取数据主要是将复制的数据保存到指定的数据格式中,比如列表或自定义数据格式。

DragEventArgs

官方文档链接如下:DragEventArgs 类 (System.Windows.Forms) | Microsoft Learn

DragEventArgs 主要包括三个事件:DragDropDragEnterDragOver

DragDrop当用户通过将对象拖动到控件上,然后通过松开鼠标按钮将其拖放到控件上来完成拖放操作时,将发生该事件。

DragEnter当用户使用鼠标拖动对象时将鼠标指针移动到控件上时,将发生该事件。

DragOver当用户使用鼠标拖动对象时,将鼠标指针移到控件上时,将发生该事件。

DragDropEffects

指定拖放操作的可能效果。其实就是数据的复制方式。属于枚举类型

All -2147483645 Copy、Move和 Scroll效果的组合。
Copy 1 将拖动源中的数据复制到放置目标。
Link 4 将拖动源中的数据链接到放置目标。
Move 2 将拖动源的数据移动到放置目标。
None 0 放置目标不接受该数据。
Scroll -2147483648 拖动时可以滚动目标,以定位在目标中当前不可见的某个放置位置。

DataObject.GetData

返回与所指定数据格式关联的数据

C# 复制代码
public virtual object? GetData (string format, bool autoConvert);
参数 数据类型 描述
format string 要检索的数据的格式
autoConvert bool 如果要将数据转换成指定的格式,则为 true;否则为 false。
Object Object 返回与指定格式相关联的数据,否则为null

DataFormats

提供 static 预定义的 Clipboard 格式名称。 使用它们来标识存储在 IDataObject 中的数据的格式。

字段

属性 描述
Bitmap 指定 Windows 位图格式。 此 static 字段是只读的。
CommaSeparatedValue 指定以逗号分隔值 (CSV) 的格式,这是电子表格常用的交换格式。 Windows 窗体不直接使用此格式。 此 static 字段是只读的。
Dib 指定 Windows 与设备无关的位图 (DIB) 格式。 此 static 字段是只读的。
Dif 指定 Windows 数据交换格式 (DIF),Windows 窗体不直接使用此格式。 此 static 字段是只读的。
EnhancedMetafile 指定 Windows 增强型图元文件格式。 此 static 字段是只读的。
FileDrop 指定 Windows 文件放置格式,Windows 窗体不直接使用此格式。 此 static 字段是只读的。文件格式为object,其实就是从资源管理器中拖放过来的文件系统对象(就是文件夹或文件)
Html 指定 HTML 剪贴板格式中的文本。 此 static 字段是只读的。
Locale 指定 Windows 区域性格式,Windows 窗体不直接使用此格式。 此 static 字段是只读的。
MetafilePict 指定 Windows 图元文件格式,Windows 窗体不直接使用此格式。 此 static 字段是只读的。
OemText 指定标准 Windows 原始设备制造商 (OEM) 文本格式。 此 static 字段是只读的。
Palette 指定 Windows 调色板格式。 此 static 字段是只读的。
PenData 指定 Windows 钢笔数据格式,它由书写软件所使用的笔画组成,Windows 窗体不使用此格式。 此 static 字段是只读的。
Riff 指定资源交换文件格式 (RIFF) 音频格式,Windows 窗体不直接使用此格式。 此 static 字段是只读的。
Rtf 指定由 RTF 数据组成的文本。 此 static 字段是只读的。
Serializable 指定封装任何类型的 Windows 窗体对象的格式。 此 static 字段是只读的。
StringFormat 指定 Windows 窗体字符串类格式,Windows 窗体使用此格式存储字符串对象。 此 static 字段是只读的。
SymbolicLink 指定 Windows 符号链接格式,Windows 窗体不直接使用此格式。 此 static 字段是只读的。
Text 指定标准 ANSI 文本格式。 此 static 字段是只读的。
Tiff 指定标记图像文件格式 (TIFF),Windows 窗体不直接使用此格式。 此 static 字段是只读的。
UnicodeText 指定标准 Windows Unicode 文本格式。 此 static 字段是只读的。
WaveAudio 指定 wave 音频格式,Windows 窗体不直接使用此格式。 此 static 字段是只读的。

方法

方法 描述
GetFormat(Int32) 为指定的 ID 返回带有 Windows 剪贴板数字 ID 和名称的 DataFormats.Format。
GetFormat(String) 为指定的格式返回带有 Windows 剪贴板数字 ID 和名称的 DataFormats.Format。
C# 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace demo196_dataformats
{
    class Program
    {
        static void Main(string[] args)
        {
            DataFormats.Format myFormat01 = DataFormats.GetFormat(13);
            DataFormats.Format myFormat02 = DataFormats.GetFormat(DataFormats.UnicodeText);

            Console.WriteLine("ID value:" + myFormat02.Id + "\n" + "Format name:" + myFormat02.Name);

            Console.WriteLine("The Format Name corressponding to the ID" + myFormat01.Id + "is:");
            Console.WriteLine(myFormat01.Name);
            Console.ReadKey();
        }
    }
}
相关推荐
小吴同学·3 小时前
.NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】
c#·.netcore·.net core
bluefox19798 小时前
使用 Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别
开发语言·c#
鲤籽鲲9 小时前
C# MethodTimer.Fody 使用详解
开发语言·c#·mfc
工业3D_大熊10 小时前
3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理
java·c++·3d·docker·c#·制造·数据可视化
yngsqq10 小时前
c#使用高版本8.0步骤
java·前端·c#
hccee13 小时前
C# IO文件操作
开发语言·c#
广煜永不挂科15 小时前
Devexpress.Dashboard的调用二义性
c#·express
初九之潜龙勿用17 小时前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
吾与谁归in18 小时前
【C#设计模式(13)——代理模式(Proxy Pattern)】
设计模式·c#·代理模式
吾与谁归in18 小时前
【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
设计模式·c#·责任链模式