基于c#/Arcgis Engine开发时,从ArcCatalog拖放(DragDrog)数据集至TextBox的实现
2018-03-06 09:56
393 查看
原文: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); // 获得拖放过来的数据集的路径
}
帮助类: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); // 获得拖放过来的数据集的路径
}
相关文章推荐
- 《游戏设计、原型与开发——基于Unity与C#从构思到实现》学习笔记一
- 基于.Net(C#开发)平台的三层框架架构软件的设计与实现
- 70-316 使用Microsoft Visual C# .NET and Microsoft Visual Studio .NET 开发及实现基于Windows的应用程序 考点整理
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 基于数据库资源的多语言实现
- C# 优化基于插件的开发框架实现Ribbon界面与功能的分离附DEMO
- 基于.Net(C#开发)平台的三层框架架构软件的设计与实现
- C# 基于插件的开发框架实现Ribbon界面与功能的分离附DEMO
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- C#中实现文件拖放打开的方法
- 用C#实现基于查寻字符串的文件行查询器(2)-相关技术介绍
- [转]在ASP.NET中如何用C#.NET实现基于表单的验证(二)
- C#中实现文件拖放打开的方法
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 用C#实现基于查寻字符串的文件行查询器(3)-设计与实现
- 使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- c#中实现文件拖放打开的方法
- 在ASP.NET中如何用C#.NET实现基于表单的验证
- 在ASP.NET中如何用C#.NET实现基于表单的验证
- 用C#实现的开发平台示意图