




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本讲主要是使用立起根本的桌面第一讲桌面GIS应用程序框架的建立MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建GIS应用程序框架.最终成果预览如下:1、新建工程启动VS2005,选择“文件|新建|工程,在工程类型中选择VisualC#,再选择Windows应用程序模板,输入名称“3sdnMap,点击确定.在解决方案治理器中将“Form1.cs"重命名为"3sdnMap.cs,在设计视图中,选中窗体,将其属性中的“Text改为“3sdnMap.2、添加控件选择工具箱中的“菜单和工具栏|MenuStrip,将
2、其拖入窗体.选择工具有i中的"ArcGISWindowsForms"节,将"ToolbarControl控件拖入窗体,并将其属性中的Dock设置为Top.选择工具箱中的“菜单和工具栏|StatusStrip,将其拖入到窗体.选择工具箱中的“容器|SplitContainer容器拖入窗体,并将其属性中的Dock设置为Fillo将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill.点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tabPage1的Name设置为tabPageLayer,T
3、ext设置为图层,将tabPage2的Name设置为tabPageProperty,Text设置为属性.如下所示.选择“图层选项卡,拖入TOCControl控件,设置Dock属性为Fill.选择“属性选项卡,拖入DataGridView控件,设置Dock属性为Fill.拖入TabControl控件到Panel2,设置Dock属性为Fillo并上述类似的方法,将两个选项卡的Name和Text分另1J设置为:tabPageMap、地图,tabPageLayout,制版.选择“地图选项卡,拖入MapControl控件,设置Dock属性为Fillo选择"制版"选项卡,拖入PageL
4、ayoutControl控件,设置Dock属性为Fill.最后将LicenseControl控件拖入到窗体的任意地方.按F5编译运行,可以看到刚刚布局好的程序界面了.3、控件绑定通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定.分别右击ToolbarControl、TOCControl控件,将Buddy设置为axMapControl1,如下列图所示.这样,工具条和图层控件就与地图控件关联了.4、添加工具此时,工具条中还没有任何工具,添加的方法也很简单.右击Toolbarcontrol,选择“属性|Items,点击Add,选择Commands选项卡中的G
5、eneric,双击Open、SaveAs、Redo、Undo即可将相应工具添加到工具条.常见的工具有:MapNavigation中的导航工具,MapInquiry中的查询工具,FeatureSelection中的选择工具,你可以根据需要酌情添加工具.5、编译运行按F5即可编译运行程序,至此桌面GIS应用程序框架根本框架已经搭建好了,你可以通过工具条的工具翻开地图文档,浏览地图了,效果如开篇所示.下一讲中将大家带来的是菜单的添加及其实现,敬请关注3SDN.NET.第二讲菜单的添加及其实现在上一讲中,我们实现了应用程序根本框架,其中有个小错误,在此先跟大家说明下.在“属性选项卡中,我们当时添加的是
6、DataGridView控件,这个控件是用来显示数据表的,而专门用于属性的查询和设置的控件是PropertyGrid控件.因此请你删除“属性选项卡中的DataGridView控件,再把位于“工具箱|所有Windows窗体|PropertyGrid"如果没有,右击选择“选择项以添加此控件控件拖到该选项卡.在这一讲中,主要讲解菜单的添加和实现.1、添加菜单请在此处键入1Tips在设计视图中,单击菜单栏,会出现“请在此处键入的提示,单击提示就可以键入菜单名称,如“文件,再单击“文件,即可输入其下拉子菜单,如下所示:SS版工ioTlArcGlSEngineName:axMapC每创立一个菜单
7、,请在其属性面板中设置Name属性,而且不要为中文,因此Name值将是此菜单响应函数的函数名的一局部,带中文的函数名,总是不好吧.本讲中,我们将添加新建New、翻开Open、添加数据AddData、保存Save、另存为SaveAs、退出Exit这些菜单,内为相应的Name属性值.Tips:你可以在属性面板中的Text属性中,把菜单名设置为中英文形式,如“翻开Open,带下划线的O表示此项菜单的快捷键是字母O,设置方法是在相应字母前加上“&字符,如“翻开&Open.但这种快捷键只在翻开此下拉菜单时才有效,即当你单击“文件菜单弹出下拉菜单时,按下字母O就可以定位到“翻开菜单.还有一
8、种在程序运行时都有效的全局快捷键,可以在属性面板中的"ShortCutKeys中设置.你还可以在属性面板中的Image属性中设置你喜欢的菜单图标.单击Image那一行右边的按钮,弹出如下菜单.选择“工程资源文件,再单击导入就可以选择你的图标了.选择萱源资遮上下文C本地资源:工程资源文件最终效果如下所示.新建New话在此处ontrol制版地图ArcGISErame:;翻开Qp&n添加数据AddBata保存Savs另存为SavaAs退出ExitF稔,.1,二,工:lemurimnramramiamsmaBiniBiinir注意,在解决方案面板中,选中刚刚添加的所有图标,在其属性面
9、板中将生成操作设置为“嵌入的资源,这一点很重要!2、实现相关菜单首先定义指针写在publicpartialclassForml:Form下面即可privateESRI.ArcGIS.Controls.IMapControl3mmapControl=null;privateESRI.ArcGIS.Controls.IPageLayoutControl2m_pageLayoutControl=null;privateIMapDocumentpMapDocument;假设以上指针无效,请添加以下引用:usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Controls;u
10、singESRI.ArcGIS.esriSystem;usingESRI.ArcGIS.Display;usingESRI.ArcGIS.Geometry;usingESRI.ArcGIS.SystemUI;在设计视图中的属性面板中,选择Form1,即主窗体,单击事件按钮(闪电形状的那个按钮),打到“Load事件并双击,添加此事件.在Form1_Load函数中初始化这些指针:/取得MapControl和PageLayoutControl的引用m_mapControl=(IMapControl3)this.axMapControl1.Object;m_pageLayoutControl=(IPa
11、geLayoutControl2)this.axPageLayoutControl1.Object;依次双击每个菜单项,添加菜单响应函数.实现代码如下:/<summary>/新建地图命令/</summary>/<paramname="sender"></param>/<paramname="e"></param>privatevoidNew_Click(objectsender,EventArgse)/本命令涉及到MapControl和PageLayoutControl同步问题,将在
12、下一讲中实现/<summary>/翻开地图文档Mxd命令/</summary>/<paramname="sender"></param>/<paramname="e"></param>privatevoidOpen_Click(objectsender,EventArgse)/本命令涉及到MapControl和PageLayoutControl同步问题,将在下一讲中实现/<summary>/添加数据命令/</summary>/<paramname=&qu
13、ot;sender"></param>/<paramname="e"></param>privatevoidAddData_Click(objectsender,EventArgse)(intcurrentLayerCount=this.axMapControl1.LayerCount;ICommandpCommand=newControlsAddDataCommandClass();pCommand.OnCreate(this.axMapControl1.Object);pCommand.OnClick();/<s
14、ummary>/保存地图文档命令/</summary>/<paramname="sender"></param>/<paramname="e"></param>privatevoidSave_Click(objectsender,EventArgse)(/首先确认当前地图文档是否有效&&if(null!=m_pageLayoutControl.DocumentFilenamem_mapControl.CheckMxFile(m_pageLayoutControl.Docum
15、entFilename)(/创立一个新的地图文档实例IMapDocumentmapDoc=newMapDocumentClass();/翻开当前地图文档mapDoc.Open(m_pageLayoutControl.DocumentFilename,string.Empty);/用PageLayout中的文档替换当前文档中的PageLayout局部mapDoc.ReplaceContents(IMxdContents)m_pageLayoutControl.PageLayout);/保存地图文档mapDoc.Save(mapDoc.UsesRelativePaths,false);mapDoc
16、.Close();/<summary>/另存为地图文档命令/</summary>/<paramname="sender"></param>/<paramname="e"></param>privatevoidSaveAs_Click(objectsender,EventArgse)(/调用另存为命令ICommandcommand=newControlsSaveAsDocCommandClass();command.OnCreate(m_controlsSynchronizer.Act
17、iveControl);command.OnClick();/<summary>/退出程序/</summary>/<paramname="sender"></param>/<paramname="e"></param>privatevoidExit_Click(objectsender,EventArgse)Application.Exit();3、编译运行按F5编译运行程序.也许你会发现,菜单命令的实现方式都是类型的.没错,在AE9.2中,内置了许多常用的Command和Tool,
18、如ControlsAddDataCommandClass、ControlsMapZoomInToolClass、ControlsMapPanToolClass等等,这些内置对象在ESRI.ArcGIS.Controls命名空间中,你可以对象浏览器中查看.而且这些内置对象的调用方式都类似,如下所示:/定义ICommandcommand=newControlsSaveAsDocCommandClass();/创立command.OnCreate(m_controlsSynchronizer.ActiveControl);/调用command.OnClick();希望你可以举一反三,去实现更多的你想
19、要的功能.在下一讲中,我将给大家带来的是MapControl与PageLayoutControl两种视图同步的实现,敬请关注3SDN.NET.第三讲MapControl与PageLayoutControl同步在ArcMap中,能够很方面地进行MapView和LayoutView两种视图的切换,而且二者之间的数据是同步显示的.关于两种视图同步的实现方法有多种,可以使用ObjectCopy对象进行数据硬拷贝,而比拟简单的方法莫过于二者共享一份地图了,这也是最常用的方法.1、新建同步类ControlsSynchronizer在解决方案面板中右击工程名,选择“添加|类,在类别中选择“VisualC#工
20、程项",在模板中选择“类,输入类名“ControlsSynchronizer.cs,将以下代码覆盖自动生成的代码:usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.IO;usingSystem.Runtime.InteropServices;usingESRI.ArcGIS.esriSystem;usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Controls;u
21、singESRI.ArcGIS.SystemUI;namespace_sdnMap/<summary>/ThisclassisusedtosynchronizeagvenPageLayoutControlandaMapControl./Wheninitialized,theusermustpassthereferenceofthesecontroltotheclass,bind/thecontroltogetherbycalling'BindControls'whichinturnsetsajoinedMapreferenced/bybothcontrol;ands
22、etallthebuddycontrolsjoinedbetweenthesetwocontrols./WhenalternatingbetweentheMapControlandPageLayoutControl,youshouldactivatethevisiblecontrol/anddeactivatetheotherbycallingActivateXXX./Thiscalssislimitedtoasituationwherethecontrolsarenotsimultaneouslyvisible./</summary>publicclassControlsSync
23、hronizer#regionclassmembersprivateIMapControl3m_mapControl=null;privateIPageLayoutControl2m_pageLayoutControl=null;privateIToolm_mapActiveTool=null;privateIToolm_pageLayoutActiveTool=null;privateboolm_IsMapCtrlactive=true;privateArrayListm_frameworkControls=null;#endregion#regionconstructor/<summ
24、ary>/默认构造函数/</summary>publicControlsSynchronizer()初始化ArrayListm_frameworkControls=newArrayList();/<summary>/构造函数/</summary>/<paramname="mapControl"></param>/<paramname="pageLayoutControl"></param>publicControlsSynchronizer(IMapControl3
25、mapControl,IPageLayoutControl2pageLayoutControl):this()为类成员赋值m_mapControl=mapControl;m_pageLayoutControl=pageLayoutControl;#endregion#regionproperties/<summary>/取得或设置MapControl/</summary>publicIMapControl3MapControlgetreturnm_mapControl;setm_mapControl=value;/<summary>/取得或设置PageLay
26、outControl/</summary>publicIPageLayoutControl2PageLayoutControlgetreturnm_pageLayoutControl;setm_pageLayoutControl=value;/<summary>/取得当前ActiveView的类型/</summary>publicstringActiveViewTypegetif(m_IsMapCtrlactive)return"MapControl"elsereturn"PageLayoutControl")III&
27、lt;summary>III取得当前活动的ControlIII<Isummary>publicobjectActiveControl(get(if(m_mapControl=null|m_pageLayoutControl=null)thrownewException("ControlsSynchronizer:ActiveControl:rnEitherMapControlorPageLayoutControlarenotinitialized!");if(m_IsMapCtrlactive)returnm_mapControl.Object;elser
28、eturnm_pageLayoutControl.Object;)#endregion#regionMethodsIII<summary>III激活MapControl并解除thePagleLayoutControlIII<Isummary>publicvoidActivateMap()(try(if(m_pageLayoutControl=null|m_mapControl=null)thrownewException("ControlsSynchronizer:ActivateMap:rnEitherMapControlorPageLayoutContro
29、larenotinitialized!");缓存当前PageLayout的CurrentToolif(m_pageLayoutControl.CurrentTool!=null)m_pageLayoutActiveTool=m_pageLayoutControl.CurrentTool;解除PagleLayoutm_pageLayoutControl.ActiveView.Deactivate();II激活MapControlm_mapControl.ActiveView.Activate(m_mapControl.hWnd);将之前MapControl最后使用的tool,作为活动的
30、tool,赋给MapControl的CurrentToolif(m_mapActiveTool!=null)m_mapControl.CurrentTool=m_mapActiveTool;m_IsMapCtrlactive=true;为每一个的frameworkcontrols,设置Buddycontrol为MapControlthis.SetBuddies(m_mapControl.Object);catch(Exceptionex)thrownewException(string.Format("ControlsSynchronizer:ActivateMap:rn0"
31、;,ex.Message);/<summary>/激活PagleLayoutControl并减活MapCotrol/</summary>publicvoidActivatePageLayout()tryif(m_pageLayoutControl=null|m_mapControl=null)thrownewException("ControlsSynchronizer:ActivatePageLayout:rnEitherMapControlorPageLayoutControlarenotinitialized!");缓存当前MapControl
32、的CurrentToolif(m_mapControl.CurrentTool!=null)m_mapActiveTool=m_mapControl.CurrentTool;解除MapControlm_mapControl.ActiveView.Deactivate();激活PageLayoutControlm_pageLayoutControl.ActiveView.Activate(m_pageLayoutControl.hWnd);将之前PageLayoutControl最后使用的tool,作为活动的tool,赋给PageLayoutControl的CurrentToolif(m_pag
33、eLayoutActiveTool!=null)m_pageLayoutControl.CurrentTool=m_pageLayoutActiveTool;m_IsMapCtrlactive=false;为每个的frameworkcontrols,设置Buddycontrol为PageLayoutControlthis.SetBuddies(m_pageLayoutControl.Object);catch(Exceptionex)thrownewException(string.Format("ControlsSynchronizer:ActivatePageLayout:rn0
34、",ex.Message);/<summary>/给予一个地图,置换PageLayoutControl和MapControl的focusmap/</summary>/<paramname="newMap"></param>publicvoidReplaceMap(IMapnewMap)if(newMap=null)thrownewException("ControlsSynchronizer二ReplaceMap:rnNewmapforreplacementisnotinitialized!");
35、if(m_pageLayoutControl=null|m_mapControl=null)thrownewException("ControlsSynchronizer:ReplaceMap:rnEitherMapControlorPageLayoutControlarenotinitialized!");/createanewinstanceofIMapscollectionwhichisneededbythePageLayout/创立一个PageLayout需要用到的,新的IMapscollection的实例IMapsmaps=newMaps();/addthenew
36、maptotheMapscollection/把新的地图加到Mapscollection里头去maps.Add(newMap);boolbIsMapActive=m_IsMapCtrlactive;/callreplacemaponthePageLayoutinordertoreplacethefocusmap/wemustcallActivatePageLayout,sinceitisthecontrolwecall'ReplaceMaps'调用PageLayout的replacemap来置换focusmap/我们必须调用ActivatePageLayout,由于它是那个我们
37、可以调用"ReplaceMaps"的Controlthis.ActivatePageLayout();m_pageLayoutControl.PageLayout.ReplaceMaps(maps);/assignthenewmaptotheMapControl/把新的地图赋给MapControlm_mapControl.Map=newMap;/resettheactivetools/重设activetoolsm_pageLayoutActiveTool=null;m_mapActiveTool=null;/makesurethatthelastactivecontroli
38、sactivated确认之前活动的control被激活if(bIsMapActive)this.ActivateMap();m_mapControl.ActiveView.Refresh();elsethis.ActivatePageLayout();m_pageLayoutControl.ActiveView.Refresh();/<summary>/bindtheMapControlandPageLayoutControltogetherbyassigninganewjointfocusmap/指定共同的Map来把MapControl和PageLayoutControl绑在一起
39、/</summary>/<paramname="mapControl"></param>/<paramname="pageLayoutControl"></param>/<paramname="activateMapFirst">trueiftheMapControlsupposedtobeactivatedfirst,如果MapControl被首先激活,贝U为true</param>publicvoidBindControls(IMapControl
40、3mapControl,IPageLayoutControl2pageLayoutControl,boolactivateMapFirst)if(mapControl=null|pageLayoutControl=null)thrownewException("ControlsSynchronizer:BindControls:rnEitherMapControlorPageLayoutControlarenotinitialized!");m_mapControl=MapControl;m_pageLayoutControl=pageLayoutControl;this.
41、BindControls(activateMapFirst);/<summary>/bindtheMapControlandPageLayoutControltogetherbyassigninganewjointfocusmapIII指定共同的Map来把MapControl和PageLayoutControl绑在一起/<Isummary>III<paramname="activateMapFirst">trueiftheMapControlsupposedtobeactivatedfirst,如果MapControl被首先激活,贝U为t
42、rue<Iparam>publicvoidBindControls(boolactivateMapFirst)(if(m_pageLayoutControl=null|m_mapControl=null)thrownewException("ControlsSynchronizer:BindControls:rnEitherMapControlorPageLayoutControlarenotinitialized!");IIcreateanewinstanceofIMapII创造IMap的一个实例IMapnewMap=newMapClass();newMap.
43、Name="Map"IIcreateanewinstanceofIMapscollectionwhichisneededbythePageLayoutII创造一个新的IMapscollection的实例,这是PageLayout所需要的IMapsmaps=newMaps();IIaddthenewMapinstancetotheMapscollectionII把新的Map实例赋给Mapscollectionmaps.Add(newMap);IIcallreplacemaponthePageLayoutinordertoreplacethefocusmap调用PageLayo
44、ut的replacemap来置换focusmapm_pageLayoutControl.PageLayout.ReplaceMaps(maps);IIassignthenewmaptotheMapControlII把新的map赋给MapControlm_mapControl.Map=newMap;IIresettheactivetoolsII重设activetoolsm_pageLayoutActiveTool=null;m_mapActiveTool=null;IImakesurethatthelastactivecontrolisactivated确定最后活动的control被激活if(a
45、ctivateMapFirst)this.ActivateMap();elsethis.ActivatePageLayout();)III<summary>/bypassingtheapplication'stoolbarsandTOCtothesynchronizationclass,itsavesyouthe/managementofthebuddycontroleachtimetheactivecontrolchanges.Thismethodadstheframework/controltoanarray;oncetheactivecontrolchanges,th
46、eclassiteratesthroughthearrayand/callesSetBuddyControloneachofthestoredframeworkcontrol./</summary>/<paramname="control"></param>publicvoidAddFrameworkControl(objectcontrol)if(control=null)thrownewException("ControlsSynchronizer:AddFrameworkControl:rnAddedcontrolisno
47、tinitialized!");m_frameworkControls.Add(control);/<summary>/Removeaframeworkcontrolfromthemanagedlistofcontrols/</summary>/<paramname="control"></param>publicvoidRemoveFrameworkControl(objectcontrol)if(control=null)thrownewException("ControlsSynchronizer:R
48、emoveFrameworkControl:rnControltoberemovedisnotinitialized!");m_frameworkControls.Remove(control);/<summary>/Removeaframeworkcontrolfromthemanagedlistofcontrolsbyspecifyingitsindexinthelist/</summary>/<paramname="index"></param>publicvoidRemoveFrameworkControlA
49、t(intindex)if(m_frameworkControls.Count<index)thrownewException("ControlsSynchronizer:RemoveFrameworkControlAt:rnIndexisoutofrange!");m_frameworkControls.RemoveAt(index);)III<summary>IIIwhentheactivecontrolchanges,theclassiteratesthroughthearrayoftheframeworkcontrolsIIIandcallesSe
50、tBuddyControloneachofthecontrols.III<Isummary>III<paramname="buddy">theactivecontrol<Iparam>privatevoidSetBuddies(objectbuddy)(try(if(buddy=null)thrownewException("ControlsSynchronizer:SetBuddies:rnTargetBuddyControlisnotinitialized!");foreach(objectobjinm_frame
51、workControls)(if(objisIToolbarControl)(IToolbarControl)obj).SetBuddyControl(buddy);)elseif(objisITOCControl)(ITOCControl)obj).SetBuddyControl(buddy);)catch(Exceptionex)(thrownewException(string.Format("ControlsSynchronizer:SetBuddies:rn0",ex.Message);)#endregion2、新建Maps类在同步类中,要用到Maps类,用于治理
52、地图对象.与新建同步类ControlsSynchronizer类似,我们新建一Maps类,其所有代码如下所示:usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;usingESRI.ArcGIS.Carto;namespace_sdnMapGuid("f27d8789-fbbc-4801-be78-0e3cd8fff9d5")ClassInterface(ClassInterfaceTy
53、pe.None)ProgId("_sdnMap.Maps")publicclassMaps:IMaps,IDisposable/classmember-usinginternallyanArrayListtomanagetheMapscollectionprivateArrayListm_array=null;#regionclassconstructorpublicMaps()m_array=newArrayList();#endregion#regionIDisposableMembers/<summary>/Disposethecollection/<
54、;/summary>publicvoidDispose()if(m_array!=null)m_array.Clear();m_array=null;#endregion#regionIMapsMembers/<summary>/RemovetheMapatthegivenindex/</summary>III<paramname="Index"></param>publicvoidRemoveAt(intIndex)(if(Index>m_array.Count|Index<0)thrownewExcept
55、ion("Maps:RemoveAt:rnIndexisoutofrange!");m_array.RemoveAt(Index);III<summary>IIIResettheMapsarrayIII<Isummary>publicvoidReset()(m_array.Clear();III<summary>IIIGetthenumberofMapsinthecollectionIII<Isummary>publicintCount(get(returnm_array.Count;III<summary>IIIReturntheMapatthegivenindexIII<Isummary>III<paramname="Index"><Iparam>III<returns><Ireturns>publicIMapg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石油开采与能源技术应用考核试卷
- 玉石的造船与海洋文化考核试卷
- 笔的制造工艺参数优化与生产试验考核试卷
- 人教版六年级上册数学《圆的面积》课件
- 教育营销策略考核试卷
- 肉制品加工业的营销创新与品牌塑造考核试卷
- 渔业养殖饲料配方优化与效果评估考核试卷
- 感恩节介绍课件
- 烟草批发商区域市场开发考核试卷
- 木制品生产过程中的质量控制点考核试卷
- 2025购销合同(电子产品)范文
- 基于全生命周期的绿色建筑成本影响因素研究
- 2025年普法知识竞赛题库及答案(共80题)
- 心力衰竭护理查房 课件
- 新型节能型建筑材料的发展方向论文
- 最新班组级安全培训试卷及答案
- 工程开工令模板
- 10000中国普通人名大全
- 2022更新国家开放大学电大《计算机组网技术》网络核心课形考任务三及四答案
- 武广客运专线隧道防排水技术的突破QC成果
- 部编版五年级道德与法治下册第三单元《百年追梦复兴中华》教材分析单元分析
评论
0/150
提交评论