esri.arcgis.controls.hookhelperclass

类型"esri.arcgis.controls.hookhelperclass"未定义构造函数 解决办法:解决方案资源管理器 -> 引用 ->"esri.arcgis.controls.hookhelperclass" -> 右键选择属性 -> 嵌入互操作类型的值改为"false"即可。
using System; using System.Drawing; using System.Linq; using System.Text; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; using System.Runtime.InteropServices; using MapControlApplication1; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.ADF; using ESRI.ArcGIS.SystemUI; using AE_test; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.DataSourcesRaster; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Desktop.AddIns; namespace MapControlApplication1 { public delegate void AfterDrawGeometry(IGeometry geometry); public class DrawPolygoncs : ITool { private IGeometry _polygon=null;//定义一个几何对象,作为绘制结果 private INewPolygonFeedback _polyFeedback=null;//定义一个多边形反馈对象 private IPoint _startPoint=null;//多边形起始结点 private IPoint _endPoint=null;//多边形终止结点 private bool _drawStart=false;//多边形绘制开始标记 public event AfterDrawGeometry eventAfterDrawGeometry; protected AxMapControl myMapControl=null; protected ESRI.ArcGIS.Controls.IHookHelper myHook; //返回结果多边形 public IGeometry Polygon { get{ return _polygon;} } public override void OnCreate(object hook) { myHook.Hook= hook; if(myHook == null) myHook=new ESRI.ArcGIS.Controls.HookHelperClass(); if(_drawStart) { (myHook.Hook as IMapControl3).CurrentTool=this; _polyFeedback = new NewPolygonFeedbackClass(); _polyFeedback.Display=myHook.ActiveView.ScreenDisplay; } } public override void OnClick()//单击鼠标开始绘图或添加结点 { _polygon=null;//每次重设多边形为空值 _drawStart=true;//开始绘制标记置为true (myHook.Hook as IMapControl).CurrentTool=this; _polyFeedback=new NewPolygonFeedbackClass(); _polyFeedback.Display=myHook. ActiveView. ScreenDisplay; } public override void OnMouseDown(int Button, int Shift, int X, int Y) { if(Button ==1) { if(_startPoint == null)//如果是多边形第一个结点 { _startPoint =(myHook.FocusMap as IActiveView).ScreenDisplay. DisplayTransformation.ToMapPoint(X,Y); _polyFeedback.Start(_startPoint);//开始多边形绘制 } else { _endPoint =(myHook.FocusMap as IActiveView).ScreenDisplay. DisplayTransformation.ToMapPoint(X,Y); _polyFeedback.AddPoint(_endPoint);//添加多边形绘制结点 } } } public override void OnMouseMove(int Button, int Shift, int X, int Y) { if(_startPoint !=null) { IPoint movePoint=(myHook.FocusMap as IActiveView).ScreenDisplay. DisplayTransformation.ToMapPoint(X,Y); _polyFeedback.MoveTo(movePoint);//鼠标移动过程中实时显示反馈效果 } } public override void Refresh(int hDC) { base.Refresh(hDC); if (_polyFeedback !=null) { (_polyFeedback as IDisplayFeedback).Refresh(hDC);//实时显示反馈效果 } } public override void OnDblClick()//双击鼠标结束绘图 { _polygon=_polyFeedback.Stop(); _startPoint=null; _drawStart=false; } int ITool.Cursor { get { return 0; } // 返回默认光标 } bool ITool.Deactivate() { return true; // 允许工具取消激活 } bool ITool.OnContextMenu(int x, int y) { return false; // 不处理右键菜单 } void ITool.OnDblClick() { OnDblClick(); // 调用自定义的双击事件 } public void OnKeyDown(int keyCode, int shift) { throw new NotImplementedException(); } public void OnKeyUp(int keyCode, int shift) { throw new NotImplementedException(); } public void OnMouseUp(int button, int shift, int x, int y) { throw new NotImplementedException(); } } }
最新发布
06-12
<think>好的,我现在需要解决用户提到的ESRI.ArcGIS.ControlsesriControlsCursor不存在的问题,确认是否缺少引用。首先,我应该回忆一下常见的ArcGIS开发中的引用问题。用户提到esriControlsCursor,这可能属于ESRI.ArcGIS.Controls命名空间中的某个枚举或类。 根据用户提供的引用[1]和[2],他们在处理其他控件和工具时遇到了问题,比如许可证设置和互操作类型嵌入的问题。这些引用提到需要添加特定的库引用,比如ESRI.ArcGIS.AnalysisTools和ESRI.ArcGIS.Geoprocessor,以及如何处理ControlsMapZoomInToolClass的问题。这可能意味着用户的项目中缺少了必要的ArcGIS组件引用。 接下来,我需要确定esriControlsCursor具体属于哪个库。在ArcGIS的COM组件中,ControlsCursor可能属于ESRI.ArcGIS.Controls库中的某个枚举,比如用于设置鼠标光标样式。用户可能在代码中尝试使用类似axMapControl1.MousePointer = esriControlsCursor.esriCursorZoomIn;的语句,但编译器报错,提示esriControlsCursor不存在。 首先,检查是否引用了ESRI.ArcGIS.Controls库。在Visual Studio中,需要从COM引用中添加ESRI ArcGIS Controls组件。常见的步骤是:右键项目→添加引用→COM→找到ESRI ArcGIS Controls并勾选。如果已经引用但仍然出错,可能需要检查具体版本是否正确,或者是否存在互操作程序集的问题。 另外,用户可能混淆了命名空间。例如,esriControlsCursor可能位于ESRI.ArcGIS.Controls命名空间下,或者是一个枚举类型,如esriCursorStyle。需要确认正确的类型名称和命名空间结构。如果用户使用的是旧版本的ArcGIS,类名或枚举可能有变化,导致找不到。 还可能存在互操作程序集未正确生成的情况。有时需要手动生成或更新这些互操作程序集,特别是当项目升级或ArcGIS版本更换时。此外,代码中可能需要显式转换或使用接口而不是具体的COM类。 总结可能的解决方案步骤:1. 确保正确添加ESRI.ArcGIS.Controls的COM引用;2. 检查类型名称是否正确,是否在正确的命名空间下;3. 必要时重新生成互操作程序集;4. 使用接口代替具体类,避免嵌入互操作类型的问题。 最后,根据用户的其他引用,他们可能在处理类似问题时已经添加了部分引用,但可能遗漏了ESRI.ArcGIS.Controls的主引用,或者需要调整项目设置中的“嵌入互操作类型”选项。例如,将某些引用的嵌入属性设置为False,以避免类型冲突。</think>### ESRI.ArcGIS.ControlsesriControlsCursor缺失的解决方案 #### 第一步:确认引用完整性 1. 在Visual Studio项目中**添加ESRI.ArcGIS.Controls引用**: - 右键项目 → 选择"添加" → "引用" - 在"COM"选项卡中找到**ESRI ArcGIS Controls**并勾选 - 确认同时引用了**ESRI.ArcGIS.SystemUI**(包含光标相关枚举)[^1] ```csharp // 正确引用后应能访问: ESRI.ArcGIS.SystemUI.esriCursorStyle // 注意实际枚举名可能为esriCursorStyle ``` #### 第二步:验证类型名称 1. 常见光标枚举实际为`esriCursorStyle`而非`esriControlsCursor` - 检查代码是否需要改为: ```csharp axMapControl1.MousePointer = esriCursorStyle.esriCursorZoomIn; ``` #### 第三步:处理互操作设置 1. 针对已添加的ESRI引用: - 在解决方案资源管理器中展开引用 - 找到ESRI.ArcGIS.Controls相关项 - 右键属性 → 设置"嵌入互操作类型"为`False` #### 第四步:版本兼容性检查 1. 确认ArcGIS Runtime版本与开发环境匹配 - 10.x版本与ArcGIS Pro的API存在差异 - 若使用旧版本SDK,建议下载对应版本的开发包 #### 典型错误修正示例 ```csharp // 错误示例 axMapControl1.MousePointer = esriControlsCursor.esriCursorZoomIn; // 修正后 axMapControl1.MousePointer = esriCursorStyle.esriCursorZoomIn; // [^2] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值