PIESDK二次开发学习

【PIESDK二次开发学习-1】

  • 前言
  • 安装PIE
  • 安装DevExpress
  • 界面基础控件尝试
    • 1 菜单栏控件使用
    • 2 底部状态栏控件使用
    • 3 窗体内容控件使用
    • 4 控件功能实现案例——加载数据

前言

因为参加比赛需求,所以写下这篇博客而且尽可能详细,主要是为了后面自己查看,也方便后面的同学参考

安装PIE

参考官方教程
https://www.cnblogs.com/PIESat/p/10248907.html

安装DevExpress

参考教程
https://www.cnblogs.com/xishuai/p/3554594.html
比较傻瓜操作

界面基础控件尝试

1 菜单栏控件使用

首先新建一个DevExpress的窗体应用程序。
PIESDK二次开发学习_第1张图片
新建的窗体应用程式如图:
PIESDK二次开发学习_第2张图片
通过加号图标能够添加控件。
PIESDK二次开发学习_第3张图片
这里我们先点击第二个加号添加一个Page。然后点击新建出来的ribbonPage,右上角会出现一个三角性符号。选择后可以设置一些属性,将Text对应内容设置为“常用功能“(设置控件显示内容),Image可以用于设置图标(暂时不设置)。
用同样的操作,修改Group2的显示内容为”数据管理“
PIESDK二次开发学习_第4张图片
然后点击数据管理旁边的加号,添加一个button控件
PIESDK二次开发学习_第5张图片
修改button的资料,修改caption为”加载矢量数据“,修改Large image可以从本地加载数据(PIE安装目录Res文件夹下提供了图标资源)。
PIESDK二次开发学习_第6张图片
修改后效果如图:
PIESDK二次开发学习_第7张图片

2 底部状态栏控件使用

在主菜单“视图”中打开“工具箱”,在工具箱中搜索StatusStrip,将控件拖到窗体界面中
PIESDK二次开发学习_第8张图片
点击加号,创建七个toolStripStatusLabel(红框标注的),和一个toolStripComboBox(蓝框标注的,这个控件在splitbutton下面,但不能直接添加到strip栏里面。可以新建splitbutton-combobox然后把这个控件剪切到状态栏)。
在这里插入图片描述

需要注意,最好在toolStripStatusLabel的属性页面修改AutoSize为False,否则控件会自动变形,而且无法通过上面的Size对空间的尺寸进行修改。
PIESDK二次开发学习_第9张图片

3 窗体内容控件使用

在工具箱里搜索,splitContainer,点击添加,用于分割界面,左侧放置图层树,右侧放置两个地图控件(制图、地图模式)
PIESDK二次开发学习_第10张图片
PIESDK二次开发学习_第11张图片
在工具箱中搜索tabcontrol,用于在右侧创建出两个窗口分别安放地图模式和制图模式。
PIESDK二次开发学习_第12张图片
将控件拖动到右侧窗口,右键点击控件编辑控件的属性。
需要修改的属性有三个:
1.Dock改为Fill(让控件充满容器)
2.Alignment改为Bottom(让标签放到底部)
3.TabPages进入修改两个页面的text分别为“地图模式”、“制图模式”(修改标签值)
PIESDK二次开发学习_第13张图片
然后在工具箱找到PIE Controls,将TOCControl拖到左侧容器中,将MapControl拖到地图模式对应的容器,将PagelayoutControl拖到制图模式对应的容器。修改三个control的属性,将Dock的值都修改为Fill
PIESDK二次开发学习_第14张图片
效果图:PIESDK二次开发学习_第15张图片

4 控件功能实现案例——加载数据

双击加载矢量数据图标,进入主界面类Form1.cs中。
在函数上面输入///插入注释,“加载矢量数据”
函数内部代码,可以直接copyPIESDK博客园的公开代码。
《PIE SDK打开矢量数据》

方法(一)
  // 获得要打开Shape数据的路径
  OpenFileDialog openFileDialog = new OpenFileDialog();
  openFileDialog.Filter = "矢量数据(*.shp)|*.shp";
  if (openFileDialog.ShowDialog() != DialogResult.OK) return;
  // 打开图层
  string filePath = openFileDialog.FileName;
  ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(filePath);
  if (layer == null) return;
  // 添加图层到地图并刷新
  mapControMain.FocusMap.AddLayer(layer);
 mapControMain.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);

方法(二)
   // 获得要打开Shape数据的路径
   OpenFileDialog openFileDialog = new OpenFileDialog();
   openFileDialog.Filter = "矢量数据(*.shp)|*.shp";
   if (openFileDialog.ShowDialog() != DialogResult.OK) return;
   // 打开矢量数据集
   string filePath= openFileDialog.FileName;
   IFeatureDataset fDataset = PIE.DataSource.DatasetFactory.OpenFeatureDataset(filePath);
   if (fDataset == null) return;
   // 创建矢量图层
   IFeatureLayer fLayer = PIE.Carto.LayerFactory.CreateDefaultFeatureLayer(fDataset);
   if (fLayer == null) return;
   // 添加图层到地图并刷新
   mapControlMain.FocusMap.AddLayer(fLayer as ILayer);
   mapControlMain.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);

代码要做一点改动:
1.创建矢量图层处要添加引用(按照提示using…carto吧好像)
2.mapControlMain换为你的工程里面的控件名称。(不知道的话可以在空白处输入mapControl看自动补全的名称是什么,我的是mapControl1)
PIESDK二次开发学习_第16张图片
运行程序
这里可能遇到报错“发生了Loadlocker”,具体原因没搞懂,但是查资料说可以通过直接修改项目设置,让他不报这个错。
具体操作:把vs2005菜单的 调试->异常->Managed Debuggin Assistants->LoaderLock 的选中状态去掉即可。如果异常(exception)这一项没有的话,在工具—自定义—命令选项卡—左边选择调试–右边把异常托到菜单里就可以了。异常也有个快捷键Ctrl+Alt+E,修改Managed Debuggin Assistants->LoaderLock 的选中状态去掉即可。
参考文章:调试出现LoaderLock异常的几种解决方法

添加shp数据,效果如图:
PIESDK二次开发学习_第17张图片
补充:窗体偏移问题
运行程序之后,窗体发生这样的偏移。
解决方案:在主窗体的构造函数中加上这一段代码

//防止界面显示乱码
 IMarkerElement markerElement = new MarkerElement();

PIESDK二次开发学习_第18张图片

到这里算完成了最基础的利用Devexpress控件做组件式开发的工作。

其实感觉Dev和vs自带的window窗体控件在基础功能使用上差不多,更多的功能我还没有尝试。使用Dev的初心是感觉windows窗体应用风格有点朴素,而且PIE它自身的界面跟Dev控件的风格比较像,所以用Dev看起来会更成熟美观一点?

你可能感兴趣的:(PIESDK开发学习)