C# 实现托拉拽获取数据

2023-12-15 12:54:14

在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-2147483645Copy、Move和 Scroll效果的组合。
Copy1将拖动源中的数据复制到放置目标。
Link4将拖动源中的数据链接到放置目标。
Move2将拖动源的数据移动到放置目标。
None0放置目标不接受该数据。
Scroll-2147483648拖动时可以滚动目标,以定位在目标中当前不可见的某个放置位置。

DataObject.GetData

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

public virtual object? GetData (string format, bool autoConvert);
参数数据类型描述
formatstring要检索的数据的格式
autoConvertbool如果要将数据转换成指定的格式,则为 true;否则为 false。
ObjectObject返回与指定格式相关联的数据,否则为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。
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();
        }
    }
}

文章来源:https://blog.csdn.net/yue008/article/details/134876504
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。