基于c#/Arcgis Engine开发时,从ArcCatalog拖放(DragDrog)数据集至TextBox的实现
原文:http://www.samuelbosch.com/2009/06/drag-drop-from-arccatalog.html
帮助类:
-
using System.Collections.Generic;
-
using System.Windows.Forms;
-
using ESRI.ArcGIS.esriSystem;
-
using ESRI.ArcGIS.Geodatabase;
-
using ESRI.ArcGIS.SystemUI;
-
-
namespace GisSolved.DragDrop
-
{
-
public class EsriDragDrop
-
{
-
const string DATAOBJECT_ESRINAMES = "ESRI Names";
-
public static bool IsValid(IDataObject dataObject)
-
{
-
return dataObject.GetDataPresent(DATAOBJECT_ESRINAMES) ||
-
dataObject.GetDataPresent(System.Windows.Forms.DataFormats.FileDrop);
-
}
-
public static List<string> GetPaths(IDataObject dataObject)
-
{
-
List<string> foundPaths = new List<string>();
-
IDataObjectHelper dataObjectHelper = new DataObjectHelperClass();
-
dataObjectHelper.InternalObject = (object)dataObject;
-
-
if (dataObjectHelper.CanGetNames())
-
{
-
IEnumName enumNames = dataObjectHelper.GetNames();
-
IName name;
-
while ((name = enumNames.Next()) != null)
-
{
-
if (name is IDatasetName)
-
{
-
IDatasetName datasetName = (IDatasetName)name;
-
// only accept feature classes and tables
-
if (datasetName.Type == esriDatasetType.esriDTFeatureClass ||
-
datasetName.Type == esriDatasetType.esriDTTable)
-
{
-
string path = System.IO.Path.Combine(datasetName.WorkspaceName.PathName, datasetName.Name);
-
foundPaths.Add(path);
-
}
-
// 还可以判断其他的类型
-
// else if (name is ...) { }
-
}
-
}
-
}
-
else if (dataObjectHelper.CanGetFiles())
-
{
-
string[] paths = (string[])dataObjectHelper.GetFiles();
-
foreach (string path in paths)
-
{
-
// TODO : Add code here to check if the file path is a valid path
-
foundPaths.Add(path);
-
}
-
}
-
return foundPaths;
-
}
-
}
-
}
TextBox要设置AllowDrag = true,并且设置两个事件:_DragEnter(拖放数据进来时的判断)、_DragDrop(拖放鼠标放开时的事件),代码如下:
private void TextBoxPath_DragEnter(object sender, DragEventArgs e)
{
e.Effect = EsriDragDrop.IsValid(e.Data) ? DragDropEffects.All : DragDropEffects.None; // 判断是从Arcgis拖放来的数据才允许
}
private void TextBoxPath_DragDrop(object sender, DragEventArgs e)
{
List<string> paths = EsriDragDrop.GetPaths(e.Data); // 获得拖放过来的数据集的路径
}
来自:https://blog.csdn.net/kowity/article/details/79454104
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2021-09-15 ArcGIS Pro中只有%n%,没有%i%
2013-09-15 arcgis10 安装1721错误
2010-09-15 添加要素后弹出属性窗口
2010-09-15 【制图】ArcGIS10制图新特性