C# 实现托拉拽获取数据
2023-12-15 12:54:14
在C#中要想实现此功能,大致流程如下:
- 数据获取,利用事件触发获取数据。
- 复制数据,确认数据的复制方式,并对复制的数据格式和应用程序做兼容性确认。
- 读取数据,根据需求,将数据显示在对应位置。
数据获取主要通过事件DragEventArgs来触发,DragEventArgs类主要为 DragDrop、DragEnter 或 DragOver 事件提供数据。
复制数据包括确认数据的复制方式和数据格式。复制方式包括复制、移动、复制数据链接等,主要通过DragDropEffects 枚举实现。其中复制的数据保存在DragEventArgs.Data中。数据格式确认其实就是对DragEventArgs.Data中的数据进行确认,这里会用到DataObject.GetData 方法和DataFormats 类的操作。
读取数据主要是将复制的数据保存到指定的数据格式中,比如列表或自定义数据格式。
DragEventArgs
官方文档链接如下:DragEventArgs 类 (System.Windows.Forms) | Microsoft Learn
DragEventArgs主要包括三个事件:DragDrop、 DragEnter、 DragOver。
DragDrop当用户通过将对象拖动到控件上,然后通过松开鼠标按钮将其拖放到控件上来完成拖放操作时,将发生该事件。
DragEnter当用户使用鼠标拖动对象时将鼠标指针移动到控件上时,将发生该事件。
DragOver当用户使用鼠标拖动对象时,将鼠标指针移到控件上时,将发生该事件。
DragDropEffects
指定拖放操作的可能效果。其实就是数据的复制方式。属于枚举类型
All | -2147483645 | Copy、Move和 Scroll效果的组合。 |
---|---|---|
Copy | 1 | 将拖动源中的数据复制到放置目标。 |
Link | 4 | 将拖动源中的数据链接到放置目标。 |
Move | 2 | 将拖动源的数据移动到放置目标。 |
None | 0 | 放置目标不接受该数据。 |
Scroll | -2147483648 | 拖动时可以滚动目标,以定位在目标中当前不可见的某个放置位置。 |
DataObject.GetData
返回与所指定数据格式关联的数据
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。 |
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!