ArcEngine:副窗体设置图例,主窗体插入图例完整代码揭秘
在ArcEngine中,你可以通过创建多个窗体(主窗体和副窗体)来设置和插入图例。以下是一个简单的示例,展示如何在副窗体中设置图例,并在主窗体中实现插入图例的功能。 首先,确保你已经安装了ArcEngine,并且你的项目已经引用了相关的ArcEngine程序集。 副窗体(LegendForm) 副窗体用于显示和选择图例。 ```csharp using System; using System.Windows.Forms; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Display; public partial class LegendForm : Form { private AxLegendControl axLegendControl; private IMapControl3 mapControl; public LegendForm(IMapControl3 mapControl) { InitializeComponent(); this.mapControl = mapControl; // 初始化 LegendControl axLegendControl = new AxLegendControl(); ((System.ComponentModel.ISupportInitialize)(axLegendControl)).BeginInit(); this.SuspendLayout(); // 设置 LegendControl 的位置和大小 axLegendControl.Dock = DockStyle.Fill; this.Controls.Add(axLegendControl); ((System.ComponentModel.ISupportInitialize)(axLegendControl)).EndInit(); this.ResumeLayout(false); // 加载地图的图例 axLegendControl.Legend.Load(mapControl.Map); } // 获取选中的图例项 public ILegendItem GetSelectedLegendItem() { // 这里简化处理,直接返回第一个图例项,实际应用中应添加选择逻辑 if (axLegendControl.Legend.LayerCount > 0) { ILayer layer = axLegendControl.Legend.get_Layer(0); if (layer.LegendGroupCount > 0) { ILegendGroup group = layer.get_LegendGroup(0); if (group.ClassCount > 0) { return group.get_Class(0); } } } return null; } } ``` 主窗体(MainForm) 主窗体用于显示地图控件,并调用副窗体来插入图例。 ```csharp using System; using System.Windows.Forms; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Display; public partial class MainForm : Form { private AxMapControl axMapControl; public MainForm() { InitializeComponent(); // 初始化 MapControl axMapControl = new AxMapControl(); ((System.ComponentModel.ISupportInitialize)(axMapControl)).BeginInit(); this.SuspendLayout(); // 设置 MapControl 的位置和大小 axMapControl.Dock = DockStyle.Fill; this.Controls.Add(axMapControl); ((System.ComponentModel.ISupportInitialize)(axMapControl)).EndInit(); this.ResumeLayout(false); // 加载地图文档(示例) axMapControl.LoadMxFile(@"C:\path\to\your\mapdocument.mxd"); } private void InsertLegendButton_Click(object sender, EventArgs e) { // 创建并显示副窗体 LegendForm legendForm = new LegendForm(axMapControl.Object as IMapControl3); if (legendForm.ShowDialog() == DialogResult.OK) { // 获取选中的图例项 ILegendItem legendItem = legendForm.GetSelectedLegendItem(); if (legendItem != null) { // 在地图上插入图例(这里以简单的文本标注为例) ITextElement textElement = new TextElementClass(); textElement.Text = legendItem.Name; textElement.Symbol = new TextSymbolClass { Font = new StdFontClass { Name = "Arial", Size = 12 } }; // 设置文本元素的位置(示例) IPoint point = new PointClass { X = 100, Y = 100 }; IElement element = textElement as IElement; element.Geometry = point; // 将文本元素添加到地图的图形容器中 axMapControl.Map.GraphicsContainer.AddElement(element, 0); ######[AI写代码神器 | 1024点数解答 | 2024-10-26 23:10:45]
- C++ 实现我的世界基岩版:从简单框架到开发要点揭秘(字节豆包 | 182点数解答 | 2025-02-22 15:53:11)214
- C++ 实现完整斗地主:含洗牌、发牌与手牌展示,可按需扩展!(字节豆包 | 1028点数解答 | 2026-01-10 08:02:37)56
- C 语言实现单链表全功能操作:创建、增删查改与逆置测试( | 4796点数解答 | 2024-03-28 16:24:20)355
- C++实现顺序存储结构基本操作:初始化、插入、删除等全解析(GPT | 1743点数解答 | 2024-09-26 00:20:17)298
- C++实现单循环链表:初始化、插入、删除等操作及测试验证(GPT | 2102点数解答 | 2024-10-13 13:39:58)167
- Java 实现通用文件存储系统:含随机读写与空闲空间回收(字节豆包 | 686点数解答 | 2024-11-21 16:25:51)243
- Java顺序表源码深度解析:从内存布局到扩容机制与Windows实战指南(阿里通义 | 2528点数解答 | 2026-04-01 10:06:46)26
- Linux开发:CentOS 6.x 中修改 /etc/inittab 设置默认运行级别及新版系统应对建议 (百度文心 | 281点数解答 | 2023-11-09 18:42:13)328
- Python 字典基本操作全解析:创建、查找与遍历示例( | 313点数解答 | 2024-05-06 09:52:01)392
- PHP 代码转易语言:API 请求及 JSON 处理改写全解析(字节豆包 | 532点数解答 | 2025-01-29 23:05:04)362
- 破解灵石开门谜题:最少放几颗能超阈值?代码详解来了!(字节豆包 | 279点数解答 | 2026-01-11 14:36:31)60
- 修正代码:准确判断正整数是否同时为 4 和 6 的倍数(字节豆包 | 276点数解答 | 2026-01-22 19:54:03)53