ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于c#/Arcgis Engine开发时,从ArcCatalog拖放(DragDrog)数据集至TextBox的实现

2022-09-15 08:30:47  阅读:266  来源: 互联网

标签:Engine 集至 string using dataObjectHelper path 拖放 name


原文:http://www.samuelbosch.com/2009/06/drag-drop-from-arccatalog.html

 

帮助类:

  1.   using System.Collections.Generic;
  2.   using System.Windows.Forms;
  3.   using ESRI.ArcGIS.esriSystem;
  4.   using ESRI.ArcGIS.Geodatabase;
  5.   using ESRI.ArcGIS.SystemUI;
  6.    
  7.   namespace GisSolved.DragDrop
  8.   {
  9.   public class EsriDragDrop
  10.   {
  11.   const string DATAOBJECT_ESRINAMES = "ESRI Names";
  12.   public static bool IsValid(IDataObject dataObject)
  13.   {
  14.   return dataObject.GetDataPresent(DATAOBJECT_ESRINAMES) ||
  15.   dataObject.GetDataPresent(System.Windows.Forms.DataFormats.FileDrop);
  16.   }
  17.   public static List<string> GetPaths(IDataObject dataObject)
  18.   {
  19.   List<string> foundPaths = new List<string>();
  20.   IDataObjectHelper dataObjectHelper = new DataObjectHelperClass();
  21.   dataObjectHelper.InternalObject = (object)dataObject;
  22.    
  23.   if (dataObjectHelper.CanGetNames())
  24.   {
  25.   IEnumName enumNames = dataObjectHelper.GetNames();
  26.   IName name;
  27.   while ((name = enumNames.Next()) != null)
  28.   {
  29.   if (name is IDatasetName)
  30.   {
  31.   IDatasetName datasetName = (IDatasetName)name;
  32.   // only accept feature classes and tables
  33.   if (datasetName.Type == esriDatasetType.esriDTFeatureClass ||
  34.   datasetName.Type == esriDatasetType.esriDTTable)
  35.   {
  36.   string path = System.IO.Path.Combine(datasetName.WorkspaceName.PathName, datasetName.Name);
  37.   foundPaths.Add(path);
  38.   }
  39.   // 还可以判断其他的类型
  40.   // else if (name is ...) { }
  41.   }
  42.   }
  43.   }
  44.   else if (dataObjectHelper.CanGetFiles())
  45.   {
  46.   string[] paths = (string[])dataObjectHelper.GetFiles();
  47.   foreach (string path in paths)
  48.   {
  49.   // TODO : Add code here to check if the file path is a valid path
  50.   foundPaths.Add(path);
  51.   }
  52.   }
  53.   return foundPaths;
  54.   }
  55.   }
  56.   }

 

 

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

标签:Engine,集至,string,using,dataObjectHelper,path,拖放,name
来源: https://www.cnblogs.com/gisoracle/p/16695255.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有