作者:nannan
前言
支持.Net组件这么久以来,客户打电话问的最多的是为什么我安装的控件拖不到form窗口中?或者64位组件的控件如何拖拽等等有关拖控件的问题。其实Visual Studio里只支持32位SuperMap控件拖拽,不支持64位。那怎样在64位的组件form窗口中放SuperMap控件呢?下面我们就详细介绍一下在Visual Studio里创建SuperMap控件的步骤。
一、创建项目
双击Visual Studio,这里以Visual Studio2017为例。点击文件——新建——项目,选择Windows窗体应用(.Net Framework),输入自己的项目名称,点击确定即可。
二、环境部署
其实SuperMap组件完全可以不用安装,直接在项目调用相关dll即可。但是注意前提是设置Path环境变量。
1.设置Path环境变量
在我的电脑——属性里,点击高级系统设置——环境变量,然后设置Path环境变量为SuperMap iObjects.Net的安装路径的bin目录;如下图:
2.引用里调用64位SuperMap组件
在Visual Studio创建的项目里引用右键点击添加引用,然后浏览本地64为iObjects.Net的组件bin路径,找到关键的这四个dll添加。
(1)SuperMap.Data.dll,Data 模块从产品中被独立出来,作为其核心模块,提供对空间数据及其属性的全面的操作和处理,包括创建、管理、访问和查询等等功能。
(2)SuperMap.Mapping.dll,Mapping模块,提供了综合的地图显示、风格设置、编辑、*面出图、制作复杂专题图等功能。如果只做三维项目可不添加该模块。
(3)SuperMap.Realspace.dll,三维模块,利用球体对地球进行三维模拟,该球体具有地理参考,同时,还提供模拟地球大气层,地球上的雾效果的功能;在三维球体可以*地进行三维浏览,如旋转、倾斜、缩放、漫游等,通过相机调整观看的视角。向三维场景添加各种地理数据,将已有的二维数据集作为三维图层添加到球体上,实现二三维一体化,并且对二维对象进行三维拉伸,从而进行三维渲染,如纹理贴图等。如果制作二维项目可不添加该模块。
(4)SuperMap.UI.Controls.dll。UI命名空间,包括Action,MapControl等。
3.在Form.cs里添加using指令
三、关键代码
1.在Form窗口设计控件分布区间
本文设计个和iDesktop窗体控件分布类似的窗口,左上分布工作空间管理器,左下分布图层管理器,右侧是地图和场景窗口。在Form窗口拖入Panel控件分布好区间位置,然后用它来装SuperMap控件。
2.代码创建控件
namespace SuperMap_Control
{
public partial class Form1 : Form
{
private Workspace workspace;
private WorkspaceControl workspaceControl;
private MapControl mapControl;
private SceneControl sceneControl;
private LayersControl layersControl;
public Form1()
{
InitializeComponent();
workspace = new Workspace();
workspaceControl = new WorkspaceControl();
//将workspaceControl边框填充到其父组件里
workspaceControl.Dock = DockStyle.Fill;
//将指定的workspaceControl控件添加到panel1控件集合中
panel1.Controls.Add(workspaceControl);
layersControl = new LayersControl();
layersControl.Dock = DockStyle.Fill;
panel2.Controls.Add(layersControl);
mapControl = new MapControl();
mapControl.Dock = DockStyle.Fill;
panel3.Controls.Add(mapControl);
sceneControl = new SceneControl();
sceneControl.Dock = DockStyle.Fill;
panel4.Controls.Add(sceneControl);
//工作空间和三大控件联动
workspaceControl.WorkspaceTree.Workspace = workspace;
mapControl.Map.Workspace = workspace;
sceneControl.Scene.Workspace = workspace;
}
}
}