ArcGIS AddIN开发:如何调用ArcMap中的选择工作空间的窗体

示例代码如下:

 public static IWorkspaceName BrowseWorkspace(int hwnd,out IWorkspace ws)
        {
            IGxObjectFilterCollection ipFilters = new GxDialogClass();
            //IGxObjectFilter ipFilter1 = new GxFilterFeatureDatasetsClass();  //要素数据集 ,导出时,IFeatureClassConverter对象无法写入Dataset中,此处隐藏掉
            //ipFilters.AddFilter(ipFilter1,false);
            IGxObjectFilter ifilt2 = new GxFilterWorkspacesClass();  //数据库工作空间,此类比较含糊,不知道具体指啥
            ipFilters.AddFilter(ifilt2,false);
            IGxObjectFilter ipFilter3 = new GxFilterFileFolderClass();  //文件工作空间
            ipFilters.AddFilter(ipFilter3,false);

            IGxDialog pGDialog = (IGxDialog)ipFilters;
            pGDialog.RememberLocation = true;
            pGDialog.Title = "请选择工作空间";
            pGDialog.AllowMultiSelect = false;

            IEnumGxObject pResultEnum = null;
            //IWorkspace ws = null;
            ws = null;
            IWorkspaceName wsn = null;
            if (pGDialog.DoModalOpen(hwnd, out pResultEnum) && pResultEnum != null)
            {
                IGxObject gxObj = pResultEnum.Next();
                if (gxObj is IGxDatabase)
                {
                    IGxDatabase gxDB = gxObj as IGxDatabase;
                    if (gxDB != null)
                    {
                        ws = gxDB.Workspace;
                        wsn = gxDB.WorkspaceName;
                    }
                }
                else if (gxObj is IGxFolder)
                {
                    //Todo: figure out how to decide which workspace to get for
                    // a particular folder (shapefile, raster etc.)
                    //IEnumName enumName = ((IGxFolder)gxObj).FileSystemWorkspaceNames;

                    // for now just assume we want a shapefile ...
                    IWorkspaceFactory wsf = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();
                    ws = wsf.OpenFromFile(((IGxFile)gxObj).Path, hwnd);
                    IDataset pOutDataset = ws as IDataset;
                    wsn = pOutDataset.FullName as IWorkspaceName;
                }
                else if (gxObj is IGxDataset)
                {
                    //如果是数据集工作空间
                    IGxDataset gxDs = gxObj as IGxDataset;
                    if (gxDs != null)
                    {
                        ws = gxDs.Dataset.Workspace;
                        wsn = gxDs.DatasetName.WorkspaceName;
                    }

                }
                Marshal.FinalReleaseComObject(pResultEnum);
            }

            pGDialog.InternalCatalog.Close();
            Marshal.FinalReleaseComObject(pGDialog);

            return wsn;
        }

上述代码可以拓展为:调用ArcMap的添加图层窗口等

时间: 2024-11-06 11:37:57

ArcGIS AddIN开发:如何调用ArcMap中的选择工作空间的窗体的相关文章

ArcGIS AddIn开发笔记(一)

学习AddIn开发,遇到了些稀奇古怪的问题,网上的资料少之又少. (1)AddIn开发,主要是通过ArcMap静态变量,与主程序中的数据等进行交互 (2)failed to register Add In .esriAddIn异常,此类异常为Visual Studio中项目名称或者类名称中出现了中文名 (3)AddIn个人觉得很不稳定,第一次写完一个Tool,在其MouseDown事件中写完了相应的代码,设置断点,结果每次都不断,也不执行,无奈的很.下载了几个网上的程序,设置了断点就断了,我重新

ArcGIS AddIN开发异常之--“ValidateAddInXMLTask”任务意外失败

ArcGIS AddIN开发时,产生如下异常错误 2 “ValidateAddInXMLTask”任务意外失败.System.NullReferenceException: 未将对象引用设置到对象的实例.   在 ESRI.ArcGIS.AddIns.SDK.ProjectItemExtensions.ReadAllText(ProjectItem pi)   在 ESRI.ArcGIS.AddIns.SDK.ConfigurationXML.GetContent()   在 ESRI.ArcG

使用Arcmap为宿主程序进行插件式开发时调用Arcmap自身进度条的问题

问题:使用Arcmap为宿主程序进行插件式开发时(选择Extendding ArcObjects模板)调用Arcmap自身进度条. 解决方法: 1 //获得IStepProgressor 进度条,并进行初始设置 2 IStepProgressor stepProgressor = m_application.StatusBar.ProgressBar; 3 stepProgressor.MinRange = 1; 4 stepProgressor.MaxRange = 10000; 5 6 //

ArcGIS AddIN开发异常之--修饰符“static”对该项无效

修饰符“static”对该项无效, 修饰符“internal”对该项无效. 该异常弹出的位置为Config.Designer.CS文件中相关插件的声明附近 internal static string Water_Info_Toolbar.AttributeBrushTool.AttributeBrushTool { get { return "[email protected]_Water_Info_Toolbar_AttributeBrushTool"; } } 类似的语句中,存在

ArcGIS AddIN开发之自定义鼠标样式

如果想修改Windows默认的鼠标样式,可以这样 //设置鼠标样式 this.Cursor = System.Windows.Forms.Cursors.Cross; 可是如果想设置成一些自定义的很好看的鼠标样式呢? 参考如下网址,该帖子是英文,vb的,而且需要您活动活动手脚才能看到内容 http://www.maprantala.com/2011/07/19/arcgis-add-in-custom-mouse-cursor/ 具体操作步骤如下: (1)添加.cur文件,具体鼠标样式可以下载或

ArcGIS AddIN异常之:object reference not set to an instance of an object

异常出现在 frmDownload frd = new frmDownload(); frd.ShowDialog(); 在ArcMap中能正常弹出窗体,点击按钮时显示此异常:object reference not set to an instance of an object 网上检索后,基本给的解释都是对象没有实例化,可对象明明实例化了! 想不明白,清理了一下解决方案,然后重新编译生成,再运行就OK 可能原因:由于电脑上之前有过此AddIN插件,当时功能模块没有写完.后来写完后,在目标电脑

ArcGIS中的AddIn开发示例

AddIn开发的插件效率高.操作简单.容易管理.方便共享.它还可以和Python结合(后面的博文中应该会涉及到),非常强大.下面简单描述一下ArcGIS中的AddIn开发过程: 1.在安装ArcGIS.AO和VS的环境下,新建项目ArcMap Add-in: 2.填写基本信息,这些信息将自动生成到Xml文件中: [Add-in Name]:是最后生成的*.esriAddIn文件的名称 其他信息,最后可在加载项管理器中看到 3.下一步,设置Add-in工具信息. [Class Name]:类名,即

visual studio2010中C#生成的,ArcGIS二次开发的basetool的dll,注册为COM组件tlb文件,并在arcmap中加载使用

写了个标题好长啊~~~~ 这两天又认识了一个新玩意,记录一下下,啦啦啦~~~~~ 话说,认识arcgis快十年了,从桌面版到engine的二次开发,其实不过才认识到它的冰山一角, 它总是能带来很多还未知的东西,实话说,就是如此的热爱着它,因为从来都觉得遨游其中,没有边界~~~~~ arcengine二次开发,这个玩意现在已经不流行了,但是其奥妙和乐趣依然无穷~~~~ 言归: 一. 之前写的basetool,basecommand等类都是在独立的系统中运行的,没有单独注册成过组件在桌面版arcma

用cocos2d-android开发android游戏时调用box2d中的native本地函数问题

用cocos2d-android开发android游戏时调用box2d中的new World(Vector2,boolean)时,出现如下报错: "java.lang.UnsatisfiedLinkError: Native method not found: com.badlogic.gdx.physics.box2d.World.newWorld:(FFZ)J" 解决方法: 在当前类中添加代码: static { System.loadLibrary("gdx"