首页 > 其他分享 >ArcObjects控件间交互

ArcObjects控件间交互

时间:2023-01-03 14:58:24浏览次数:46  
标签:控件 静态 tool ArcObjects 查询 事件 usercontrol 交互

需要开发一个查询要素并实时显示查询信息的功能,用到了arcobjects可停靠窗口(dockableForm),交互当然是用arcobjtects Tool,如何在点击事件获取要素并获取相关信息后将信息传到dockable form颇费了一番周折。惯性思维,是在tool类中声明dockableForm的实例,通过dockableForm的共有变量或属性赋值,但arcobjects的机制是在DockableWindow类里实例化了一个userControl(应该是DockableWindow负责停靠等功能,userControl负责控件定制),只提供了IDockableWindow接口和IDockableWindowManager管理器,由manager只能获取idockablewindow接口,无法获取usercontrol。

多次尝试后,找到了arcobjects的一个extension的示例代码片段解决了问题。原理是将需要暴露的usercontrol控件,声明对应的静态变量,并在构造函数中将控件与静态变量挂接。这样,在tool中查询的结果可以直接赋值给usercontrol类的静态控件,实现tool中查询结果在usercontrol中的实时显示。

之后,也通过事件实现了相同的功能:在tool中定义一个静态事件(delegate的参数为查询结果),该事件在查询结果获取后触发。由于是静态事件,在usercontrol中订阅tool类的查询事件,在事件处理器中处理该查询结果。

上面两种方法本质相同,由于在同一时刻只能传递一份数据,因此可以通过静态事件或者静态变量实现传递,区别是在哪一端定义该静态内容。

另:事件机制(发布者-订阅者机制):

class EventPublisherClass{

public delegate void SomeEventHanler(parames[]);//这个委托也可以定义在其它类中

public (static) event SomeEventHandler SomeEvent;//事件

  public (static) void OnSomeEvent(Parames[]){//触发事件,可以在内部被调用,也可以在外部

    if(SomeEvent!=null){

      SomeEvent(Parames);

    }

  }

  void someMethod(){

  params=DataChanges();

  OnSomeEvent(params);

  }

}

class EventScriberClass{

  someMethod(){

    EventPublisherClass.SomeEvent+=EventHandler;//静态事件

    EventPublisherClass epc=new EventPublisherClass();

    epc.SomeEvent+=EventHandler;//实例事件

  }

  void EventHandler(params[]){//和publisherClass里delegate签名一致,在事件触发时被调用

  }

}

 

标签:控件,静态,tool,ArcObjects,查询,事件,usercontrol,交互
From: https://www.cnblogs.com/jwwry/p/17022194.html

相关文章

  • 使用postman模拟与后端flask交互
    简单的通过POST请求传参,然后返回结果参数的过程①dumps()和loads()json.dumps():把字典转成json字符串,json.loads():把json字符串转成字典他们操作的都是变量(变量是存储在......
  • devexpress控件教程 能加载任何控件的下拉菜单
    DevExpress控件很强大,今天开始写一些关于这个控件的博客,希望能对小伙伴们有所帮助。今天的内容是打造一个万能的下拉菜单控件。一般来说,ComboBoxEdit控件已经够用了,加载编......
  • 漂亮 的日期时间控件 日历
     xgcalendar基于jQuery的日历控件,操作方式和样式参考GoogleCalendar。1:支持三种视图类型(日,月,周)2:支持定义一周的开始日期3:支持无刷新获取数据和更新数据4:支持......
  • MaterialDesign 控件
    为按钮添加阴影<ButtonWidth="250"materialDesign:ElevationAssist.Elevation="Dp5"Style="{StaticResourceMaterialDesignRaisedButton}"ToolTip="Materi......
  • winform控件缩写 (集合)
    winform控件缩写(集合)文章内所有的控件都是博主从网上辛苦整理出来的,希望对大家有用winform控件缩写(一)标准控件winform控件缩写(二)容器控件winform控件缩写(三)菜单和工具栏wi......
  • delphi 关于ComBoBox控件用代码设置值时,onchange事件失效的解决方案
    问题表现为:手动设置里一点问题也没有,值和颜色都能正常显示,但是通过代码操作时,onchange事件并没有被触发.  解决方案是让它主动触发:ComArr是个全局TList,窗体......
  • Appium的触屏操作&设备交互api
    Appium的触屏操作TouchAction---Appium2.0以上不在可以使用官网地址:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md......
  • 获取小程序toast控件
    Toast含义为了给当前视图显示一个浮动的显示块,与dialog不同它永远不会获得焦点显示时间有限,根据用户设置的显示时间后自动消失本身是个系统级别的控件,它归属系统setti......
  • VTK_Learning_交互部件_测量类Widget的应用
    1.与测量类相关的主要Widget与测量类相关的主要Widget如下:vtkDistanceWidget:用于在二维平面上测量两点之间的距离。vtkAngleWidget:用于在平面的角度测量。vtkBiDimensiona......
  • VTK_Learning_交互与Widget_观察者/命令模式
    1.前言一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能。图形处理软件ParaView(hhttp://www.paraview.org)、德国癌症研究中心研发的MITK(http://www......