SuperMap iObjects .NET 11i二次开发(三)——小白进阶之有关文件型工作空间操作

本文详细介绍了SuperMapiObjects11i.NET中的工作空间概念、类和方法,包括工作空间的管理、常用类说明、界面设计中的菜单和对话框控件使用,以及文件操作如打开、保存和另存工作空间的实现过程。
摘要由CSDN通过智能技术生成

前言

上一篇博文简单介绍了控件与控件之间如何关联并且如何释放资源,这个部分主要认识下有关于文件型工作空间的操作。


工作空间是SuperMap中的一个重要的概念,工作空间存储了一个工程项目中所有的数据源,地图的组织关系,工作空间通过其中的数据源集合对象(Datasources),地图集合对象(Maps)来管理其下的数据源和地图。在当前版本中,一个应用程序中允许多个工作空间共存,每个工作空间可以管理自己的一套数据源和地图等。不同的工作空间不可相互操作。


一、有关工作空间常用类说明

Workspace类工作空间是用户的工作环境,主要完成数据的组织和管理,包括打开、关闭、创建、保存工作空间文件。
WorkspaceConnectionInfo类

工作空间连接信息类包括了工作空间连接的所有信息,如所要连接的服务器名称、数据库名称、用户名、密码等。

二、有关工作空间常用方法说明

Workspace.Open()用于打开已有的工作空间。
Workspace.Save()用于将现存的工作空间存盘,不改变原有的名称。
Workspace.SaveAs()根据给定的工作空间连接信息将工作空间进行另存操作。
WorkSpace.Close()

关闭工作空间。

三、界面设计

(1)创建菜单

在上一篇博客的界面设计基础上,在MenuStrip控件中创建有关于文件型工作空间操作的菜单,如下图所示:

(2)创建打开文件对话框控件

OpenFileDialog:是Windows窗体应用程序中的一个对话框控件,用于在应用程序中打开文件时提供一个标准的文件选择界面。通过使用OpenFileDialog,用户可以浏览计算机上的文件系统,选择一个或多个文件,然后将选定的文件路径返回给应用程序,以便应用程序可以打开、读取或处理这些文件。

(3)创建保存文件对话框控件

SaveFileDialog:是Windows窗体应用程序中的一个对话框控件,用于在应用程序中保存文件时提供一个标准的文件保存界面。通过使用SaveFileDialog,用户可以浏览计算机上的文件系统,输入文件名,选择保存的文件类型,然后将保存的文件路径返回给应用程序,以便应用程序可以将数据保存到指定的文件中。

(4)创建右键菜单

ContextMenuStrip:是一个用于创建右键菜单的类,通过ContextMenuStrip控件,可以在窗体或控件上创建一个右键菜单,用户右键单击该窗体或控件时会弹出该菜单,选择相应的操作。

四、菜单栏功能实现

(1)打开工作空间

private void OpenWorkspace_Click(object sender, EventArgs e)
{
    //获取对话框
    this.openFileDialog1.Title = "打开工作空间";
    this.openFileDialog1.FileName = "";
    //对打开文件进行格式过滤
    this.openFileDialog1.Filter = "工作空间文件 (*.smwu)|*.smwu|工作空间文件 (*.sxwu)|*.sxwu";
    //返回文件结果
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        //关闭存在的工作空间
        D_workspace.Close();
        //将文件名作为工作空间名称
        string fileName = openFileDialog1.FileName;
        //传递工作空间连接信息
        WorkspaceConnectionInfo file = new WorkspaceConnectionInfo(fileName);
        //打开工作空间
        D_workspace.Open(file);
        //刷新工作空间树
        this.D_workspaceControl.WorkspaceTree.Refresh();

    }
}

(2) 保存工作空间

private void SaveWorkspace_Click(object sender, EventArgs e)
{
    if (D_workspace.Save())
    {
        MessageBox.Show("工作空间保存成功!", "提示");
    }
    else
    {
        MessageBox.Show("工作空间保存失败!", "提示");
        return;
    }
}

(3)另存工作空间

 private void SaveAsWorkspace_Click(object sender, EventArgs e)
 {
     //获取对话框
     this.saveFileDialog1.Title = "保存工作空间";
     //对另存文件进行格式过滤
     this.saveFileDialog1.Filter = "SuperMap工作空间文件(*.smwu)|*.smwu|SuperMap工作空间文件(*.sxwu)|*.sxwu";
     if (this.saveFileDialog1.FileName != null && this.saveFileDialog1.ShowDialog() == DialogResult.OK)
     {
         //从 SaveFileDialog控件中获取用户选择的文件名,并去除文件扩展名后赋值给变量name
         //这个操作通常用于获取用户选择的文件的纯文件名,而不包括文件的扩展名部分
         String name = System.IO.Path.GetFileNameWithoutExtension(this.saveFileDialog1.FileName);
         //传递工作空间连接信息
         WorkspaceConnectionInfo file = new WorkspaceConnectionInfo();
         file.Server = this.saveFileDialog1.FileName;
         file.Password = "";
         //根据 SaveFileDialog 控件的 FilterIndex属性的值来判断文件的类型
         if (this.saveFileDialog1.FilterIndex == 1)
         {
             file.Type = WorkspaceType.SMWU;
         }
         else
         {
             file.Type = WorkspaceType.SXWU;
         }
         D_workspace.Caption = name;
         //另存于指定路径
         if (D_workspace.SaveAs(file))
         {
             MessageBox.Show("工作空间另存成功!");
         }
         else
         {
             MessageBox.Show("另存工作空间失败!", "提示");
             return;
         }
     }
 }

(4)关闭工作空间

private void CloseWorkspace_Click(object sender, EventArgs e)
{
    this.D_workspace.Close();
}

五、右键菜单功能实现

有关于单击工作空间树节点代码如下,右键菜单内按钮的功能代码和上方菜单栏功能代码一致。

//为 D_workspaceControl控件的WorkspaceTree控件的NodeMouseClick事件添加了一个名为tree_NodeMouseClick的事件处理程序
//当单击WorkspaceTree控件的节点时,将触发 tree_NodeMouseClick 事件处理程序,从而执行相关的操作或代码逻辑
this.D_workspaceControl.WorkspaceTree.NodeMouseClick += new TreeNodeMouseClickEventHandler(tree_NodeMouseClick);


private void tree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    //单击Workspace节点时,弹出一个名为 contextMenuStrip_workspace的右键菜单,选择相应的操作
    WorkspaceTreeNodeBase treenode = e.Node as WorkspaceTreeNodeBase;
    if (treenode.NodeType == WorkspaceTreeNodeDataType.Workspace)
    {
        treenode.ContextMenuStrip = contextMenuStrip_workspace;
    }

}

六、完整实现代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SuperMap.Data;
using SuperMap.Mapping;
using SuperMap.UI;
using SuperMap.Realspace;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private Workspace D_workspace;
        private WorkspaceControl D_workspaceControl;
        private MapControl D_mapControl;
        private SceneControl D_sceneControl;
        private LayersControl D_layersControl;

        public Form1()
        {
            String mail = "";  // 需要替换为自己的SuperMap账号
            String password = "";
            bool login = SuperMap.Data.CloudLicense.Login(mail, password);

            InitializeComponent();

            D_workspace = new Workspace();
            D_workspaceControl = new WorkspaceControl();
            //控件始终填充整个父容器
            D_workspaceControl.Dock = DockStyle.Fill;
            //将指定的控件添加到panel1控件中
            splitContainer1.Panel1.Controls.Add(D_workspaceControl);

            D_layersControl = new LayersControl();
            D_layersControl.Dock = DockStyle.Fill;
            splitContainer1.Panel2.Controls.Add(D_layersControl);


            D_mapControl = new MapControl();
            D_mapControl.Dock = DockStyle.Fill;
            //将指定的控件添加到panel1控件中
            panel3.Controls.Add(D_mapControl);

            D_sceneControl = new SceneControl();
            D_sceneControl.Dock = DockStyle.Fill;
            panel4.Controls.Add(D_sceneControl);

            //为 D_workspaceControl控件的WorkspaceTree控件的NodeMouseClick事件添加了一个名为tree_NodeMouseClick的事件处理程序。
            //当单击WorkspaceTree控件的节点时,将触发 tree_NodeMouseClick 事件处理程序,从而执行相关的操作或代码逻辑。
            this.D_workspaceControl.WorkspaceTree.NodeMouseClick += new TreeNodeMouseClickEventHandler(tree_NodeMouseClick);

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //工作空间和控件联动
            D_workspaceControl.WorkspaceTree.Workspace = D_workspace;
            D_mapControl.Map.Workspace = D_workspace;
            D_sceneControl.Scene.Workspace = D_workspace;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            D_mapControl.Dispose();
            D_layersControl.Dispose();
            D_sceneControl.Dispose();
            D_workspaceControl.Dispose();
            D_workspace.Close();
            D_workspace.Dispose();
        }


        private void OpenWorkspace_Click(object sender, EventArgs e)
        {
            //获取对话框
            this.openFileDialog1.Title = "打开工作空间";
            this.openFileDialog1.FileName = "";
            //对打开文件进行格式过滤
            this.openFileDialog1.Filter = "工作空间文件 (*.smwu)|*.smwu|工作空间文件 (*.sxwu)|*.sxwu";
            //返回文件结果
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //关闭存在的工作空间
                D_workspace.Close();
                //将文件名作为工作空间名称
                string fileName = openFileDialog1.FileName;
                //传递工作空间连接信息
                WorkspaceConnectionInfo file = new WorkspaceConnectionInfo(fileName);
                //打开工作空间
                D_workspace.Open(file);
                //刷新工作空间树
                this.D_workspaceControl.WorkspaceTree.Refresh();

            }
        }

        private void SaveWorkspace_Click(object sender, EventArgs e)
        {
            if (D_workspace.Save())
            {
                MessageBox.Show("工作空间保存成功!", "提示");
            }
            else
            {
                MessageBox.Show("工作空间保存失败!", "提示");
                return;
            }
        }

        private void SaveAsWorkspace_Click(object sender, EventArgs e)
        {
            //获取对话框
            this.saveFileDialog1.Title = "保存工作空间";
            //对另存文件进行格式过滤
            this.saveFileDialog1.Filter = "SuperMap工作空间文件(*.smwu)|*.smwu|SuperMap工作空间文件(*.sxwu)|*.sxwu";
            if (this.saveFileDialog1.FileName != null && this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //从 SaveFileDialog控件中获取用户选择的文件名,并去除文件扩展名后赋值给变量name
                //这个操作通常用于获取用户选择的文件的纯文件名,而不包括文件的扩展名部分
                String name = System.IO.Path.GetFileNameWithoutExtension(this.saveFileDialog1.FileName);
                //传递工作空间连接信息
                WorkspaceConnectionInfo file = new WorkspaceConnectionInfo();
                file.Server = this.saveFileDialog1.FileName;
                file.Password = "";
                //根据 SaveFileDialog 控件的 FilterIndex属性的值来判断文件的类型
                if (this.saveFileDialog1.FilterIndex == 1)
                {
                    file.Type = WorkspaceType.SMWU;
                }
                else
                {
                    file.Type = WorkspaceType.SXWU;
                }
                D_workspace.Caption = name;
                //另存于指定路径
                if (D_workspace.SaveAs(file))
                {
                    MessageBox.Show("工作空间另存成功!");
                }
                else
                {
                    MessageBox.Show("另存工作空间失败!", "提示");
                    return;
                }
            }
        }

        private void CloseWorkspace_Click(object sender, EventArgs e)
        {
            this.D_workspace.Close();
        }

        private void tree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            //单击Workspace节点时,弹出一个名为 contextMenuStrip_workspace的右键菜单,选择相应的操作。
            WorkspaceTreeNodeBase treenode = e.Node as WorkspaceTreeNodeBase;
            if (treenode.NodeType == WorkspaceTreeNodeDataType.Workspace)
            {
                treenode.ContextMenuStrip = contextMenuStrip_workspace;
            }

        }
    }
}

七、运行结果


总结

以上就是有关于SuperMap iObjects 11i .NET关于工作空间的操作的一些过程记录,我们下篇博文再见!

  • 34
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值