主体
public partial class frmMain : Form
{
string flagOnMouseDown = null; //标记onMouseDown事件
string flagOnMouseMove = null; //标记OnMouseMove事件
IBasicMap basicMap = null;
ILayer layer = null;
System.Object other = null;
System.Object index = null;
esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;
public frmMain()
{
InitializeComponent();
}
#region 按钮-控件属性演示
private void btn2Arrow_Click(object sender, EventArgs e)
{
// 由axMapControl1控件的对象实现IMapControlDefault接口
IMapControlDefault pMapControlDefault = axMapControl1.Object as IMapControlDefault;
// 设置pMapControlDefault的鼠标指针样式为箭头样式
pMapControlDefault.MousePointer = esriControlsMousePointer.esriPointerArrow;
// 将整数1强制转换为esriControlsMousePointer枚举类型,并设置pMapControlDefault的鼠标指针样式为该枚举值对应的样式
//pMapControlDefault.MousePointer = (esriControlsMousePointer)1;
}
#endregion
#region 菜单-文件-加载地图文档
private void 加载地图文档ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 由axMapControl1控件的对象实现IMapControlDefault接口
IMapControlDefault pMapControlDefault = axMapControl1.Object as IMapControlDefault;
// 初始化一个空字符串变量,用于存储文件路径
var filePath = string.Empty;
// 使用OpenFileDialog来打开文件选择对话框
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
// 设置对话框的初始目录为C盘根目录
//openFileDialog.InitialDirectory = "c:\\";
// 设置文件选择对话框的标题为“打开地图文档”
openFileDialog.Title = "打开地图文档";
// 设置文件选择对话框的过滤条件,支持多种地图文件格式
openFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd;|ArcMap模板(*.mxt)|*.mxt|发布地图文件(*.pmf)|*.pmf|所有地图格式(*.mxd;*.mxt;*.pmf)|*.mxd;*.mxt;*.pmf";
// 设置文件选择对话框为单文件选择模式,不允许用户一次选择多个文件
openFileDialog.Multiselect = false;
// 设置默认过滤索引为所有文件
openFileDialog.FilterIndex = 1;
// 如果用户改变了目录,则还原到初始目录
openFileDialog.RestoreDirectory = false;
// 显示文件选择对话框,并等待用户选择文件或取消操作
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// 获取用户选择的文件路径
filePath = openFileDialog.FileName;
// 检查给定的文件路径是否是一个有效的地图文档
if (pMapControlDefault.CheckMxFile(filePath))
{
// 如果文件路径有效,则加载该地图文档
pMapControlDefault.LoadMxFile(filePath);
}
else
{
// 如果文件路径无效,则显示一个消息框提示用户该文件是无效的地图文档
MessageBox.Show(filePath + "是无效的地图文档!", "信息提示");
// 终止当前方法或函数的执行
return;
}
}
}
}
#endregion
#region 菜单-文件-添加数据-加载shapefile数据
private void 加载shapefile数据ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 创建一个新的ShapefileWorkspaceFactoryClass实例,用于处理shapefile类型的工作空间
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
// 声明一个IFeatureWorkspace类型的变量,用于表示特征工作空间
IFeatureWorkspace pFeatureWorkspace;
// 声明两个字符串变量,用于存储文件目录和文件名
string fileDirectory = "";
string fileName = "";
// 创建一个新的FeatureLayerClass实例,但此时它并没有与任何特征类关联
IFeatureLayer pFeatureLayer = new FeatureLayerClass();
// 声明一个IFeatureClass类型的变量,用于表示特征类
IFeatureClass pFeatureClass;
// 创建一个OpenFileDialog实例,用于打开文件对话框
OpenFileDialog ofd = new OpenFileDialog();
// 显示文件对话框,并检查用户是否点击了确定按钮
if (ofd.ShowDialog() == DialogResult.OK)
{
// 获取用户选择的文件的完整路径
string fullPath = ofd.FileName;
// 检查用户是否确实选择了一个文件(尽管在标准OpenFileDialog中这是不太可能的)
if (string.IsNullOrEmpty(fullPath))
{
// 如果文件路径为空,则显示一个消息框并退出函数
MessageBox.Show("文件选取出错!", "提示");
return;
}
// 查找文件路径中最后一个'\'的位置,用于分割目录和文件名
int sIndex = fullPath.LastIndexOf("\\");
// 提取文件所在的目录
fileDirectory = fullPath.Substring(0, sIndex);
// 提取文件名
fileName = fullPath.Substring(sIndex + 1);
}
else
{
// 如果用户没有点击确定按钮,则直接退出函数
return;
}
// 使用之前创建的pWorkspaceFactory打开指定的文件目录作为工作空间
pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(fileDirectory, 0) as IFeatureWorkspace;
// 在工作空间中打开用户指定的特征类
pFeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName);
// 将pFeatureLayer与打开的特征类关联
pFeatureLayer.FeatureClass = pFeatureClass;
// 设置pFeatureLayer的名字为特征类的别名
pFeatureLayer.Name = pFeatureClass.AliasName;
// 将pFeatureLayer添加到地图控件的焦点地图中
axMapControl1.ActiveView.FocusMap.AddLayer(pFeatureLayer);
// 设置地图控件的显示范围为用户加载的特征层的范围
axMapControl1.ActiveView.Extent = pFeatureLayer.AreaOfInterest;
// 刷新地图控件以显示新的图层和范围
axMapControl1.ActiveView.Refresh();
}
#endregion
#region 菜单-文件-访问图层数据
private void 访问图层数据ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 获取当前ArcMap控件中处于活动视图且为焦点的地图对象
// axMapControl1 可能是ArcMap控件的实例
// ActiveView 获取当前活动的视图
IActiveView pActiveView = axMapControl1.ActiveView;
// 创建一个新的frmDataBoard窗体实例,并将当前活动的视图pActiveView作为参数传入
// frmDataBoard 可能是自定义的窗体,用于展示或操作地图图层数据
frmDataBoard dataBoard = new frmDataBoard(pActiveView);
// 显示frmDataBoard窗体
// Show 方法将窗体显示出来
dataBoard.Show();
}
#endregion
#region 菜单-地图浏览-全图显示
private void 全图显示ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 声明一个ESRI.ArcGIS.Geometry.IEnvelope类型的变量pEnvelope,用于存储绘制的矩形范围
ESRI.ArcGIS.Geometry.IEnvelope pEnvelope;
// 将axMapControl1的FullExtent属性赋值给pEnvelope变量
// FullExtent属性表示地图控件axMapControl1中所有图层范围的并集,即地图控件的完整范围
pEnvelope = axMapControl1.FullExtent;
// 将axMapControl1的Extent属性设置为pEnvelope,即设置地图的当前显示范围为地图控件的完整范围
// Extent属性通常用来表示地图控件当前显示的范围
axMapControl1.Extent = pEnvelope;
}
#endregion
#region 菜单-地图浏览-拉框放大
private void 拉框放大ToolStripMenuItem_Click(object sender, EventArgs e)
{
flagOnMouseDown = "LaKuangFangDa"; //flagOnMouseDown值为1时进行“拉框放大”操作
}
#endregion
#region 菜单-地图浏览-逐级放大
private void 逐级放大ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 声明一个IEnvelope类型的变量pEnvelope,用于存储地图控件axMapControl1的当前显示范围
IEnvelope pEnvelope;
// 将axMapControl1的当前显示范围赋值给pEnvelope变量
pEnvelope = axMapControl1.Extent;
// 调用pEnvelope的Expand方法,以0.5为比例因子在X和Y方向上扩展Envelope的大小
// 第三个参数true表示扩展是乘性的,即按照比例来扩展
pEnvelope.Expand(0.5, 0.5, true);
// 将扩展后的Envelope范围设置为axMapControl1的当前显示范围
axMapControl1.Extent = pEnvelope;
// 刷新axMapControl1的ActiveView,以显示更新后的地图范围
axMapControl1.ActiveView.Refresh();
}
#endregion
#region 菜单-地图浏览-漫游
private void 漫游ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 将全局变量flagOnMouseDown的值设置为"ManYou"
// 这是一个标志,用于后续的代码判断应该执行哪种鼠标操作处理逻辑
flagOnMouseDown = "ManYou";
// 将axMapControl1的鼠标指针样式设置为平移模式
// esriControlsMousePointer.esriPointerPan是ESRI ArcGIS库中的鼠标指针样式枚举值,代表平移模式
axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan;
}
#endregion
#region 菜单-地图浏览-拉框缩小
private void 拉框缩小ToolStripMenuItem_Click(object sender, EventArgs e)
{
flagOnMouseDown = "LaKuangSuoXiao";
}
#endregion
#region 菜单-书签管理-查看书签列表
private void toolStripCBXbookmarks_DropDown(object sender, EventArgs e)
{
// 清除toolStripCBXbookmarks控件中的所有项
toolStripCBXbookmarks.Items.Clear();
// 用axMapControl1的Map对象实现IMapBookmarks接口,并将结果存储在pBookmarks变量中
IMapBookmarks pBookmarks = axMapControl1.Map as IMapBookmarks;
// 从pBookmarks中获取书签的枚举器,并存储在pEnumSpatialBookmark变量中
IEnumSpatialBookmark pEnumSpatialBookmark = pBookmarks.Bookmarks;
// 重置书签枚举器,使其从第一个书签开始
pEnumSpatialBookmark.Reset();
// 获取第一个书签,并存储在pSpatialBookmark变量中
ISpatialBookmark pSpatialBookmark = pEnumSpatialBookmark.Next();
// 当pSpatialBookmark不为null时,即还有书签未处理时,执行循环
while (pSpatialBookmark != null)
{
// 将当前书签的名称添加到toolStripCBXbookmarks控件的下拉列表中
toolStripCBXbookmarks.Items.Add(pSpatialBookmark.Name);
// 获取下一个书签,并更新pSpatialBookmark变量
pSpatialBookmark = pEnumSpatialBookmark.Next();
}
}
#endregion
#region 菜单-书签管理-书签列表-缩放至书签范围
private void toolStripCBXbookmarks_SelectedIndexChanged(object sender, EventArgs e)
{
// 用axMapControl1的Map对象实现IMapBookmarks接口,并将结果存储在pBookmarks变量中
IMapBookmarks pBookmarks = axMapControl1.Map as IMapBookmarks;
// 从pBookmarks中获取书签的枚举器,并存储在pEnumSpatialBookmark变量中
IEnumSpatialBookmark pEnumSpatialBookmark = pBookmarks.Bookmarks;
// 获取axMapControl1控件的Map对象,并将其引用赋值给pMap变量
IMap pMap = axMapControl1.Map;
// 重置书签枚举器,使其从第一个书签开始
pEnumSpatialBookmark.Reset();
// 获取第一个书签,并存储在pSpatialBookmark变量中
ISpatialBookmark pSpatialBookmark = pEnumSpatialBookmark.Next();
// 当pSpatialBookmark不为null时,即还有书签未处理时,执行循环
while (pSpatialBookmark != null)
{
// 判断当前选中的书签名称是否与当前遍历到的书签名称相同
if (toolStripCBXbookmarks.SelectedItem.ToString() == pSpatialBookmark.Name)
{
// 如果相同,则调用书签的ZoomTo方法,将地图视图定位到该书签所在的位置
pSpatialBookmark.ZoomTo(pMap);
// 刷新地图控件的当前视图,以确保更改生效
axMapControl1.ActiveView.Refresh();
// 跳出循环,因为已经找到了对应的书签并进行了定位
break;
}
// 如果当前书签不是选中的书签,则获取下一个书签,并更新pSpatialBookmark变量
pSpatialBookmark = pEnumSpatialBookmark.Next();
}
}
#endregion
#region 菜单-书签管理-添加书签
private void 添加书签ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 创建一个frmWenBenShuRu类型的新实例,并将其赋值给frmName变量
frmWenBenShuRu frmName = new frmWenBenShuRu();
// 显示frmName窗体,并等待用户关闭它(这是一个模态对话框)
frmName.ShowDialog();
// 检查frmName窗体的Create属性是否为1(表示用户成功创建了书签信息)
if (frmName.Create == 1)
{
// 创建一个AOIBookmark对象实例,用于存储书签信息
AOIBookmark pAOIBookmark = new AOIBookmark();
// 定义一个ISpatialBookmark类型的变量,用于在循环中遍历书签
ISpatialBookmark pSpatialBookmark;
// 将axMapControl1.Map作为实现IMapBookmarks接口的对象,并赋值给pMapBookmarks变量
IMapBookmarks pMapBookmarks = axMapControl1.Map as IMapBookmarks;
// 获取pMapBookmarks中所有的书签,并赋值给pEnumSpatialBookmark
IEnumSpatialBookmark pEnumSpatialBookmark = pMapBookmarks.Bookmarks;
// 重置pEnumSpatialBookmark枚举器的位置,以便从头开始遍历
pEnumSpatialBookmark.Reset();
// 遍历所有的书签
for (pSpatialBookmark = pEnumSpatialBookmark.Next(); pSpatialBookmark != null; pSpatialBookmark = pEnumSpatialBookmark.Next())
{
// 如果当前书签的名称与frmName中指定的书签名称相同
if (pSpatialBookmark.Name == frmName.BookmarkName)
{
// 显示一个错误消息框,告诉用户已有同名书签
MessageBox.Show("已有同名书签!", "错误");
// 退出当前方法
return;
}
}
// 设置pAOIBookmark的书签名称为用户在frmName窗体中输入的书签名称
pAOIBookmark.Name = frmName.BookmarkName;
// 设置pAOIBookmark的书签位置为当前axMapControl1的ActiveView的Extent(即地图的当前显示范围)
pAOIBookmark.Location = axMapControl1.ActiveView.Extent;
// 将pAOIBookmark添加到pMapBookmarks的书签集合中
pMapBookmarks.AddBookmark(pAOIBookmark);
}
}
#endregion
#region 菜单-地图浏览-缩放至当前图层
private void toolStripComboBoxTuCeng_DropDown(object sender, EventArgs e)
{
// 清空toolStripComboBoxTuCeng控件的所有项
toolStripComboBoxTuCeng.Items.Clear();
// 获取axMapControl1控件中的地图对象
IMap pMap = axMapControl1.Map;
// 遍历地图中的图层
for (int i = 0; i < pMap.LayerCount; i++)
{
// 将当前图层的名称添加到toolStripComboBoxTuCeng控件的项集合中
toolStripComboBoxTuCeng.Items.Add(pMap.get_Layer(i).Name);
}
}
private void toolStripComboBoxTuCeng_SelectedIndexChanged(object sender, EventArgs e)
{
// 获取toolStripComboBoxTuCeng控件中当前选中项的文本,并转换为字符串类型,赋值给layerName变量
string layerName = toolStripComboBoxTuCeng.SelectedItem.ToString();
// 声明一个ILayer类型的变量pLayer,并初始化为null
ILayer pLayer = null;
// 获取axMapControl1控件中的地图对象,赋值给pMap变量
IMap pMap = axMapControl1.Map;
// 使用for循环遍历地图中的所有图层
for (int i = 0; i < pMap.LayerCount; i++)
{
// 如果当前图层的名称与layerName相等
if (layerName == pMap.get_Layer(i).Name)
{
// 将当前图层赋值给pLayer变量
pLayer = pMap.get_Layer(i);
// 找到匹配的图层后跳出循环
break;
}
}
// 判断pLayer是否不为null,即是否找到了对应的图层
if (pLayer != null)
{
// 获取axMapControl1控件的当前活动视图,赋值给pActiveView变量
IActiveView pActiveView = axMapControl1.ActiveView;
// 将地图的视图范围设置为找到的图层的感兴趣区域(AreaOfInterest)
pActiveView.Extent = pLayer.AreaOfInterest;
// 刷新地图视图,以显示新的视图范围
pActiveView.Refresh();
}
}
#endregion
#region 菜单-GIS分析-识别地理要素
private void 识别地理要素ToolStripMenuItem_Click(object sender, EventArgs e)
{
flagOnMouseMove = "ShiBie";
flagOnMouseDown = "ShiBie";
}
#endregion
#region 菜单-GIS分析-统计数据
private void 统计数据ToolStripMenuItem_Click(object sender, EventArgs e)
{
frmStatistics pStatistics = new frmStatistics(axMapControl1.ActiveView);
pStatistics.Show();
}
#endregion
#region 地图控件-OnMouseDown事件
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{
// 根据flagOnMouseDown的值进行不同的操作
// 在C#中,switch表达式(从C# 7.0开始)支持字符串类型。
switch (flagOnMouseDown)
{
#region OnMouseDown-拉框放大
case "LaKuangFangDa": // 如果flagOnMouseDown的值为"LaKuangFangDa"
{
// 声明一个ESRI.ArcGIS.Geometry.IEnvelope类型的变量pEnvelope,用于存储绘制的矩形范围
ESRI.ArcGIS.Geometry.IEnvelope pEnvelope;
// 调用axMapControl1的TrackRectangle方法,让用户通过鼠标绘制一个矩形,并将结果赋值给pEnvelope
pEnvelope = axMapControl1.TrackRectangle();
// 判断绘制的矩形范围是否为空。如果为空,则显示一个消息框,提示用户“所选为空”
if (pEnvelope.IsEmpty)
{
MessageBox.Show("所选为空", "提示信息");
}
else
{
// 如果矩形范围不为空,则将axMapControl1的Extent属性设置为pEnvelope,即设置地图的当前显示范围为绘制的矩形范围
axMapControl1.Extent = pEnvelope;
// 刷新axMapControl1的ActiveView,使地图的显示更新为新的范围
axMapControl1.ActiveView.Refresh();
}
}
break; // 跳出switch语句
#endregion
#region OnMouseDown-拉框缩小
case "LaKuangSuoXiao":
{
// 将axMapControl1的Object属性转换为IMapControlDefault接口类型的实例,并赋值给pMapControl变量
IMapControlDefault pMapControl = axMapControl1.Object as IMapControlDefault;
// 调用IEnvelope的TrackRectangle方法,该方法会等待用户通过鼠标在地图上绘制一个矩形,然后返回这个矩形的范围(Envelope)
IEnvelope pEnvelope = axMapControl1.TrackRectangle();
// 检查返回的Envelope是否为空,或者其宽度和高度是否为0,如果是,则直接退出方法
if (pEnvelope == null || pEnvelope.IsEmpty || pEnvelope.Height == 0 || pEnvelope.Width == 0)
{
return;
}
// 如果有有效的拉框范围,则执行以下操作
else
{
// 将当前视图范围宽或高基于比例平方的缩放算法进行缩放
double dWidth = pMapControl.Extent.Width * pMapControl.Extent.Width / pEnvelope.Width;
double dHeight = pMapControl.Extent.Height * pMapControl.Extent.Height / pEnvelope.Height;
// 根据拉框的位置和当前视图范围计算新的最小X和Y坐标
double dXmin = pMapControl.Extent.XMin -
((pEnvelope.XMin - pMapControl.Extent.XMin) * pMapControl.Extent.Width /
pEnvelope.Width);
double dYmin = pMapControl.Extent.YMin -
((pEnvelope.YMin - pMapControl.Extent.YMin) * pMapControl.Extent.Height /
pEnvelope.Height);
// 根据新的最小坐标和计算出的宽度和高度,计算新的最大X和Y坐标
double dXmax = dXmin + dWidth;
double dYmax = dYmin + dHeight;
// 使用新的坐标设置Envelope的范围
pEnvelope.PutCoords(dXmin, dYmin, dXmax, dYmax);
}
// 将更新后的Envelope范围设置为地图控件的当前显示范围
pMapControl.Extent = pEnvelope;
// 刷新地图控件的视图,以显示更新后的范围
pMapControl.Refresh();
}
break;
#endregion
#region OnMouseDown-漫游
case "ManYou": // 当flagOnMouseDown的值为"ManYou"时
{
// 调用axMapControl1的Pan方法,开始平移操作
// Pan方法通常用于让用户通过拖动鼠标来平移地图视图
axMapControl1.Pan();
}
break; // 跳出switch语句
#endregion
#region OnMouseDown-识别
case "ShiBie":
{
IPoint pPoint = axMapControl1.ToMapPoint(e.x, e.y);
IActiveView pActiveView = axMapControl1.ActiveView;
frmIdentify pIdentify = new frmIdentify(pActiveView, pPoint);
pIdentify.Show();
}
break;
#endregion
}
}
#endregion
#region 地图控件-OnMouseMove事件
private void axMapControl1_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e)
{
switch (flagOnMouseMove)
{
#region OnMouseMove-识别地理要素
case "ShiBie":
{
// 由axMapControl1控件的对象实现IMapControlDefault接口
IMapControlDefault pMapControlDefault = axMapControl1.Object as IMapControlDefault;
// 设置pMapControlDefault的鼠标指针样式为识别贯标样式
pMapControlDefault.MousePointer = esriControlsMousePointer.esriPointerIdentify;
}
break;
#endregion
}
}
#endregion
#region 目录树控件-上下文菜单条-查看属性表
private void 查看属性表ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 获取当前ArcMap控件中处于活动视图且为焦点的地图对象
// axMapControl1 可能是ArcMap控件的实例
// ActiveView 获取当前活动的视图
IActiveView pActiveView = axMapControl1.ActiveView;
// 创建一个新的frmDataBoard窗体实例,并将当前活动的视图pActiveView作为参数传入
// frmDataBoard 可能是自定义的窗体,用于展示或操作地图图层数据
frmDataBoard dataBoard = new frmDataBoard(pActiveView);
// 显示frmDataBoard窗体
// Show 方法将窗体显示出来
dataBoard.Show();
}
#endregion
#region 目录树控件-OnMouseDown事件
private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e)
{
if (e.button == 2)
{
axTOCControl1.HitTest(e.x, e.y, ref item, ref basicMap, ref layer, ref other, ref index);
if (layer != null)
{
cmsTOCYouJian.Show(axTOCControl1, new System.Drawing.Point(e.x, e.y));
}
}
}
private void miSuoFangZhiTuCeng_Click(object sender, EventArgs e)
{
IActiveView pActiveView = axMapControl1.ActiveView;
pActiveView.Extent = layer.AreaOfInterest;
pActiveView.Refresh();
}
#endregion
Databorad
public partial class frmDataBoard : Form
{
IActiveView mActiveView;
IMap mMap;
IFeatureLayer mFeatureLayer;
string mWhereClause;
IFeatureCursor mFeatureCursor;
public frmDataBoard()
{
InitializeComponent();
}
// 定义一个名为frmDataBoard的公共构造函数,它接受一个类型为ESRI.ArcGIS.Carto.IActiveView的参数fActiveView
public frmDataBoard(ESRI.ArcGIS.Carto.IActiveView fActiveView)
{
// 调用窗体的初始化函数,该函数通常用于设置窗体上的控件和其他资源
InitializeComponent();
// 将传入的fActiveView参数赋值给类的私有成员变量pActiveView
mActiveView = fActiveView;
// 通过pActiveView的FocusMap属性获取当前活动视图中的地图,并将其赋值给类的私有成员变量pMap
mMap = mActiveView.FocusMap;
// 清空cbxTuCeng控件(可能是一个ComboBox或类似的控件)的所有项
// 这意味着在下一次添加项之前,该控件将不包含任何图层名称
cbxTuCeng.Items.Clear();
// 遍历地图pMap中的图层
// 地图图层数量通过pMap的LayerCount属性获取
// 遍历从第0个图层开始,直到最后一个图层
for (int i = 0; i < mMap.LayerCount; i++)
{
// 获取地图中索引为i的图层,并调用其Name属性获取图层名称
// 将当前图层的名称添加到toolStripComboBoxTuCeng控件的项集合中
cbxTuCeng.Items.Add(mMap.get_Layer(i).Name);
}
}
private void cbxTuCeng_SelectedIndexChanged(object sender, EventArgs e)
{
// 从cbxTuCeng控件的选定项中获取图层名称,并将其转换为字符串
string layerName = cbxTuCeng.SelectedItem.ToString();
// 创建一个SnippetLayer对象,该对象可能包含一些与图层相关的辅助方法
SnippetLayer sl = new SnippetLayer();
// 调用SnippetLayer的GetIndexNumberFromLayerName方法,根据图层名称获取图层在地图中的索引号
int layerIndex = sl.GetIndexNumberFromLayerName(mActiveView, layerName);
// 使用获取的索引号,从地图中获取相应的FeatureLayer对象
IFeatureLayer pFeatureLayer = sl.GetFeatureLayerFromLayerIndexNumber(mActiveView, layerIndex);
mFeatureLayer = pFeatureLayer;
// 从FeatureLayer对象中获取FeatureClass对象,FeatureClass代表了一组具有相同属性和几何类型的要素
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
// 获取FeatureClass的字段集合
IFields pFields = pFeatureClass.Fields;
// 创建一个新的DataTable对象,用于存储查询结果
System.Data.DataTable pDataTable = new DataTable();
// 遍历字段集合,为每个字段创建一个DataTable的列
for (int i = 0; i < pFields.FieldCount; i++)
{
IField pField = pFields.get_Field(i);
pDataTable.Columns.Add(pField.Name);
}
// 创建一个查询过滤器,此处WhereClause为空,表示查询所有要素
// 创建一个QueryFilterClass的实例,用于构建查询过滤器
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "";
// 执行查询,获取FeatureCursor对象,FeatureCursor用于遍历FeatureClass中的要素
// 使用FeatureClass的Search方法,并传入查询过滤器和false(表示不保留对FeatureClass的引用)
IFeatureCursor pFeatureCursor = pFeatureClass.Search(pQueryFilter, false);
// 遍历FeatureCursor中的每个Feature
IFeature pFeature = pFeatureCursor.NextFeature();
while (pFeature != null)
{
// 创建一个新的DataRow对象,用于存储当前Feature的数据
System.Data.DataRow row = pDataTable.NewRow();
// 遍历字段集合,为每个字段从Feature中获取值并添加到DataRow中
for (int i = 0; i < pFields.FieldCount; i++)
{
IField pField = pFields.get_Field(i);
// 使用Feature的get_Value方法,根据字段索引获取值
row[pField.Name] = pFeature.get_Value(i);
}
// 将DataRow添加到DataTable中
pDataTable.Rows.Add(row);
// 获取下一个Feature
pFeature = pFeatureCursor.NextFeature();
}
// 将DataTable设置为dgvLayerData控件的数据源,这样dgvLayerData就能显示查询到的数据了
dgvLayerData.DataSource = pDataTable;
}
private void btnSelectByAttribute_Click(object sender, EventArgs e)
{
frmSelectByAttribute frmSba = new frmSelectByAttribute(mFeatureLayer);
frmSba.ShowDialog();
// 从FeatureLayer对象中获取FeatureClass对象,FeatureClass代表了一组具有相同属性和几何类型的要素
IFeatureClass pFeatureClass = mFeatureLayer.FeatureClass;
// 获取FeatureClass的字段集合
IFields pFields = pFeatureClass.Fields;
// 创建一个新的DataTable对象,用于存储查询结果
System.Data.DataTable pDataTable = new DataTable();
// 遍历字段集合,为每个字段创建一个DataTable的列
for (int i = 0; i < pFields.FieldCount; i++)
{
IField pField = pFields.get_Field(i);
pDataTable.Columns.Add(pField.Name);
}
// 创建一个QueryFilterClass的实例,用于构建查询过滤器
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = frmSba.WhereClause;
// 将mFeatureLayer对象转换为IFeatureSelection接口,用于进行要素选择操作
IFeatureSelection pFeatureSelection = mFeatureLayer as IFeatureSelection;
// 清空当前的选择集
pFeatureSelection.Clear();
#region 将Search的结果链接到数据表格视图
// 执行查询,获取FeatureCursor对象
IFeatureCursor pFeatureCursor = pFeatureClass.Search(pQueryFilter, false);
// 遍历FeatureCursor中的每个Feature
IFeature pFeature = pFeatureCursor.NextFeature();
while (pFeature != null)
{
pFeatureSelection.Add(pFeature);
// 创建一个新的DataRow对象,用于存储当前Feature的数据
System.Data.DataRow row = pDataTable.NewRow();
// 遍历字段集合,为每个字段从Feature中获取值并添加到DataRow中
for (int i = 0; i < pFields.FieldCount; i++)
{
IField pField = pFields.get_Field(i);
// 使用Feature的get_Value方法,根据字段索引获取值
row[pField.Name] = pFeature.get_Value(i);
}
// 将DataRow添加到DataTable中
pDataTable.Rows.Add(row);
// 获取下一个Feature
pFeature = pFeatureCursor.NextFeature();
}
// 将DataTable设置为dgvLayerData控件的数据源,这样dgvLayerData就能显示查询到的数据了
dgvLayerData.DataSource = pDataTable;
#endregion
// 调用pFeatureSelection的SelectFeatures方法,进行要素选择
pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
// 调用mActiveView的PartialRefresh方法,仅刷新与地理选择相关的视图部分
mActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, mActiveView.Extent);
}
private void dgvLayerData_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
// 将dgvLayerData的DataSource转换为DataTable类型,并赋值给pDataTable
DataTable pDataTable = dgvLayerData.DataSource as DataTable;
// 通过e.RowIndex获取在数据表格中试图中双击的行,赋值给pDataRow
// e.RowIndex是DataGridView的CellDoubleClick事件传递的行索引
DataRow pDataRow = pDataTable.Rows[e.RowIndex];
// 从pDataRow中获取"ObjectID"字段的值,并转换为int类型,赋值给pID
int pID = Convert.ToInt32(pDataRow["ObjectID"]);
// 将mFeatureLayer转换为IFeatureSelection接口,并赋值给pFeatureSelection
IFeatureSelection pFeatureSelection = mFeatureLayer as IFeatureSelection;
// 清除当前的选择集
pFeatureSelection.Clear();
// 刷新mActiveView视图,使得清除选择集的操作生效
mActiveView.Refresh();
// 获取pFeatureSelection的选择集,赋值给pSelectionSet
ISelectionSet pSelectionSet = pFeatureSelection.SelectionSet;
// 将pID添加到选择集中
pSelectionSet.Add(pID);
// 局部刷新mActiveView视图,只刷新与地理选择相关的部分
// 使得新添加的选择项在视图中显示
mActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
}
按图形选择
public partial class frmIdentify : Form
{
IActiveView mActiveView = null;
ISpatialFilter mSpatialFilter = new SpatialFilterClass();
public frmIdentify()
{
InitializeComponent();
}
public frmIdentify(IActiveView fActiveView, IPoint fPoint)
{
// 初始化组件,这通常是窗体或控件的构造函数中的第一行代码,用于加载设计器生成的控件和组件
InitializeComponent();
// 将传入的fActiveView赋值给mActiveView,用于存储活动视图
mActiveView = fActiveView;
///默认在最顶层图层识别地理要素
// 获取mActiveView的FocusMap中的第一个图层
IFeatureLayer pFeatureLayer = mActiveView.FocusMap.get_Layer(0) as IFeatureLayer;
// 将传入的fPoint转换为IGeometry接口,并赋值给pSpatialFilter的Geometry属性
mSpatialFilter.Geometry = fPoint as IGeometry;
// 设置pSpatialFilter的空间关系为esriSpatialRelWithin,表示查询与给定几何体(即fPoint)相交的要素
// esriSpatialRelEnum是ArcGI中定义空间关系的枚举类型
mSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelWithin;
// 调用IdentifyFirstFeatureFromPointSearchInFeatureLayer方法,传入前面获取的图层和空间过滤器
IdentifyFirstFeatureFromPointSearchInFeatureLayer(pFeatureLayer, mSpatialFilter);
}
private void cbxTuCeng_DropDown(object sender, EventArgs e)
{
// 通过pActiveView的FocusMap属性获取当前活动视图中的地图,并将其赋值给类的私有成员变量pMap
IMap pMap = mActiveView.FocusMap;
// 清空cbxTuCeng控件(可能是一个ComboBox或类似的控件)的所有项
// 这意味着在下一次添加项之前,该控件将不包含任何图层名称
cbxTuCeng.Items.Clear();
// 遍历地图pMap中的图层
// 地图图层数量通过pMap的LayerCount属性获取
// 遍历从第0个图层开始,直到最后一个图层
for (int i = 0; i < pMap.LayerCount; i++)
{
// 获取地图中索引为i的图层,并调用其Name属性获取图层名称
// 将当前图层的名称添加到toolStripComboBoxTuCeng控件的项集合中
cbxTuCeng.Items.Add(pMap.get_Layer(i).Name);
}
}
private void cbxTuCeng_SelectedIndexChanged(object sender, EventArgs e)
{
// 从cbxTuCeng控件的选定项中获取图层名称,并将其转换为字符串
string layerName = cbxTuCeng.SelectedItem.ToString();
// 创建一个SnippetLayer对象,该对象可能包含一些与图层相关的辅助方法
SnippetLayer sl = new SnippetLayer();
// 调用SnippetLayer的GetIndexNumberFromLayerName方法,根据图层名称获取图层在地图中的索引号
int layerIndex = sl.GetIndexNumberFromLayerName(mActiveView, layerName);
// 使用获取的索引号,从地图中获取相应的FeatureLayer对象
IFeatureLayer pFeatureLayer = sl.GetFeatureLayerFromLayerIndexNumber(mActiveView, layerIndex);
// 调用IdentifyFirstFeatureFromPointSearchInFeatureLayer方法,传入前面获取的图层和空间过滤器
IdentifyFirstFeatureFromPointSearchInFeatureLayer(pFeatureLayer, mSpatialFilter);
}
private void IdentifyFirstFeatureFromPointSearchInFeatureLayer(IFeatureLayer fFeatureLayer, ISpatialFilter fSpatialFilter)
{
// 获取特征图层对应的特征类
IFeatureClass pFeatureClass = fFeatureLayer.FeatureClass;
// 使用给定的空间过滤器在特征类中搜索,并创建一个特征游标(用于遍历查询结果)
// 第二个参数false表示不回收行(即不立即释放资源)
IFeatureCursor pFeatureCursor = pFeatureClass.Search(fSpatialFilter, false);
// 创建一个新的DataTable对象,用于存储查询结果
DataTable pDataTable = new DataTable();
// 添加两列到DataTable中,一列名为"字段",另一列名为"值"
pDataTable.Columns.Add("字段");
pDataTable.Columns.Add("值");
// 获取FeatureClass的字段集合
// 字段集合包含了特征类中的所有字段信息
// 注释:获取FeatureClass的字段集合
IFields pFields = pFeatureClass.Fields;
// 调用 pFeatureCursor 的 NextFeature 方法来获取游标中的下一个要素
IFeature pFeature = pFeatureCursor.NextFeature();
if (pFeature != null)
{
// 如果Feature不为空,则遍历字段集合,从Feature中获取值并添加到DataRow中
for (int i = 0; i < pFields.FieldCount; i++)
{
// 创建一个新的DataRow对象,用于存储字段名和对应的值
DataRow row = pDataTable.NewRow();
// 从字段集合中获取当前索引对应的字段
IField pField = pFields.get_Field(i);
// 使用Feature的get_Value方法,根据字段索引获取值
row["字段"] = pField.Name; // 将字段名添加到DataRow的"字段"列中
row["值"] = pFeature.get_Value(i); // 将字段值添加到DataRow的"值"列中
// 将DataRow添加到DataTable中
pDataTable.Rows.Add(row);
}
}
// 将DataTable设置为dgvInfo(可能是DataGridView控件)的数据源
// 这样dgvInfo就会显示DataTable中的数据
dgvInfo.DataSource = pDataTable;
}
private string ShapeToChinese(esriGeometryType fesriGeometryType)
{
string shapeCh = "";
switch (fesriGeometryType)
{
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
shapeCh="点";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultipoint:
shapeCh = "多点";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryLine:
shapeCh="线段";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryCircularArc:
shapeCh="圆弧";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryEllipticArc:
shapeCh="椭圆弧";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryBezier3Curve:
shapeCh="三次贝塞尔曲线";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPath:
shapeCh="路径";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
shapeCh ="折线";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryRing:
shapeCh="环";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
shapeCh="多边形";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryEnvelope:
shapeCh="矩形范围";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryAny:
shapeCh="任意几何体";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryBag:
shapeCh="几何体集合";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultiPatch:
shapeCh="表面面片集合";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryTriangleStrip:
shapeCh="三角形带";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryTriangleFan:
shapeCh="三角形扇";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryRay:
shapeCh="射线";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometrySphere:
shapeCh="球体";
break;
case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryTriangles:
shapeCh = "三角形面片";
break;
default:
shapeCh = "未知类型几何体";
break;
}
return shapeCh;
}
按属性选择
public partial class frmSelectByAttribute : Form
{
// 声明一个IFeatureLayer类型的变量mFeatureLayer,并初始化为null。IFeatureLayer通常用于表示地图上的一个要素图层。
IFeatureLayer mFeatureLayer = null;
// 声明一个IFeatureClass类型的变量mFeatureClass,并初始化为null。IFeatureClass是ArcGIS Engine中表示要素类的接口,它定义了一个具有相同几何类型和属性集的一组要素。
IFeatureClass mFeatureClass = null;
// 声明一个整型变量isString,用来表示字段是否为字符串类型。
// 0为非字符串
// 1为字符串
int isString = 0;
// 声明一个字符串变量whereClause,用于存储SQL查询语句的条件部分。
string whereClause;
public string WhereClause
{
get { return whereClause; }
set { whereClause = value; }
}
public frmSelectByAttribute()
{
InitializeComponent();
}
// frmSelectByAttribute类的构造函数,它接受一个IFeatureLayer类型的参数fFeatureLayer。
public frmSelectByAttribute(IFeatureLayer fFeatureLayer)
{
// 调用窗体或控件的初始化方法,该方法通常在窗体设计器中自动生成,用于初始化窗体上的控件等。
InitializeComponent();
// 将传入的IFeatureLayer对象赋值给类的成员变量mFeatureLayer。
mFeatureLayer = fFeatureLayer;
// 从mFeatureLayer对象中获取其关联的IFeatureClass对象,并赋值给类的成员变量mFeatureClass。
mFeatureClass = mFeatureLayer.FeatureClass;
// 获取mFeatureClass对象的IFields接口,该接口包含了要素类中所有字段的信息。
IFields pFields = mFeatureClass.Fields;
// 清除下拉列表框cbxField中的所有项,以确保不会显示旧的字段信息。
cbxField.Items.Clear();
// 遍历pFields中的所有字段。
for (int i = 0; i < pFields.FieldCount; i++)
{
// 获取索引为i的字段对象。
IField pField = pFields.get_Field(i);
// 将字段的名称添加到下拉列表框cbxField的项集合中。
cbxField.Items.Add(pField.Name);
}
}
private void cbxField_SelectedIndexChanged(object sender, EventArgs e)
{
// 获取用户从下拉列表框cbxField中选择的字段的索引
int fieldIndex = cbxField.SelectedIndex;
// 创建一个新的字符串列表values,用于存储字段的所有值
List<string> values = new List<string>();
// 创建一个新的字符串列表uniqueValues,用于存储字段的唯一值
List<string> uniqueValues = new List<string>();
// 创建一个新的查询过滤器对象pQueryFilter,并初始化为QueryFilterClass的实例
IQueryFilter pQueryFilter = new QueryFilterClass();
// 初始化查询过滤器的WhereClause属性为空字符串,表示不进行任何过滤
pQueryFilter.WhereClause = "";
// 执行查询,获取IFeatureCursor对象,用于遍历FeatureClass中的要素
// 使用FeatureClass的Search方法,并传入查询过滤器和false(表示不保留对FeatureClass的引用)
IFeatureCursor pFeatureCursor = mFeatureClass.Search(pQueryFilter, false);
// 尝试从FeatureCursor中获取第一个Feature
IFeature pFeature = pFeatureCursor.NextFeature();
// 检查获取到的Feature的指定字段的值是否为字符串类型
if (pFeature.get_Value(fieldIndex).GetType().Name == "String")
{
// 如果是字符串类型,则设置isString为1,可能用于后续的逻辑判断
isString = 1;
}
// 使用while循环遍历FeatureCursor中的所有Feature
while (pFeature != null)
{
// 将Feature的指定字段的值添加到values列表中
values.Add(pFeature.get_Value(fieldIndex).ToString());
// 移动到下一个Feature
pFeature = pFeatureCursor.NextFeature();
}
// 使用LINQ查询从values列表中获取唯一值,并将结果存储在uniqueValues列表中
uniqueValues = values.Distinct().ToList<string>();
// 清除另一个下拉列表框cbxUniqueValue中的所有项
cbxUniqueValue.Items.Clear();
// 遍历uniqueValues列表,并将每个唯一值添加到cbxUniqueValue的下拉列表中
foreach (string temp in uniqueValues)
{
cbxUniqueValue.Items.Add(temp);
}
// 在文本框tbxWhere中追加用户所选字段的双引号包裹的字段名
// 注意:这里只是添加了字段名,并没有构建完整的SQL查询语句
tbxWhere.Text += "\"" + cbxField.SelectedItem.ToString() + "\"";
}
private void cbxUniqueValue_SelectedIndexChanged(object sender, EventArgs e)
{
// 字段值为字符串在Where条件子句中表达方式
if (isString == 1) tbxWhere.Text += "\'" + cbxUniqueValue.SelectedItem.ToString() + "\'";
// 字段值非字符串在Where条件子句中表达方式
if (isString == 0) tbxWhere.Text += cbxUniqueValue.SelectedItem.ToString();
}
private void btnOK_Click(object sender, EventArgs e)
{
whereClause = tbxWhere.Text;
this.Close();
}
private void tbxWhere_TextChanged(object sender, EventArgs e)
{
whereClause = tbxWhere.Text;
}
private void btnClear_Click(object sender, EventArgs e)
{
tbxWhere.Clear();
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
数据统计
public partial class frmStatistics : Form
{
IActiveView mActiveView;
IFeatureClass mFeatureClass;
ICursor mCursor;
public frmStatistics()
{
InitializeComponent();
}
public frmStatistics(IActiveView fActiveView)
{
InitializeComponent();
// 将传入的fActiveView参数赋值给类的私有成员变量pActiveView
mActiveView = fActiveView;
// 通过pActiveView的FocusMap属性获取当前活动视图中的地图,并将其赋值给类的私有成员变量pMap
IMap pMap = fActiveView.FocusMap;
// 清空cbxTuCeng控件的所有项
cbxTuCeng.Items.Clear();
// 遍历地图pMap中的图层
for (int i = 0; i < pMap.LayerCount; i++)
{
// 获取地图中索引为i的图层,并调用其Name属性获取图层名称
// 将当前图层的名称添加到toolStripComboBoxTuCeng控件的项集合中
cbxTuCeng.Items.Add(pMap.get_Layer(i).Name);
}
}
private void cbxTuCeng_SelectedIndexChanged(object sender, EventArgs e)
{
// 从cbxTuCeng控件的选定项中获取图层名称,并将其转换为字符串
string layerName = cbxTuCeng.SelectedItem.ToString();
// 创建一个SnippetLayer对象,该对象可能包含一些与图层相关的辅助方法
SnippetLayer sl = new SnippetLayer();
// 调用SnippetLayer的GetIndexNumberFromLayerName方法,根据图层名称获取图层在地图中的索引号
int layerIndex = sl.GetIndexNumberFromLayerName(mActiveView, layerName);
// 使用获取的索引号,从地图中获取相应的FeatureLayer对象
IFeatureLayer pFeatureLayer = sl.GetFeatureLayerFromLayerIndexNumber(mActiveView, layerIndex);
// 从FeatureLayer对象中获取FeatureClass对象,FeatureClass代表了一组具有相同属性和几何类型的要素
mFeatureClass = pFeatureLayer.FeatureClass;
// 创建一个查询过滤器,此处WhereClause为空,表示查询所有要素
// 创建一个QueryFilterClass的实例,用于构建查询过滤器
IQueryFilter pQueryFilter = new QueryFilterClass();
pQueryFilter.WhereClause = "";
// 执行查询,获取FeatureCursor对象,FeatureCursor用于遍历FeatureClass中的要素
// 使用FeatureClass的Search方法,并传入查询过滤器和false(表示不保留对FeatureClass的引用)
IFeatureCursor pFeatureCursor = mFeatureClass.Search(pQueryFilter, false);
// 尝试从FeatureCursor中获取第一个Feature
IFeature pFeature = pFeatureCursor.NextFeature();
// 获取FeatureClass的字段集合
IFields pFields = mFeatureClass.Fields;
// 清除下拉列表框cbxField中的所有项,以确保不会显示旧的字段信息。
cbxField.Items.Clear();
// 遍历字段集合
for (int i = 0; i < pFields.FieldCount; i++)
{
// 从pFields中获取索引为i的字段,并将其赋值给pField变量
IField pField = pFields.get_Field(i);
// 从pFeature中获取索引为i的字段值,并将其赋值给pValue变量
object pValue = pFeature.get_Value(i);
// 判断pValue的类型是否为数值类型
if (pValue is int || pValue is double || pValue is float || pValue is decimal || pValue is long || pValue is short)
// 如果满足上述条件之一,则将pField的Name属性添加到cbxField的Items集合中
cbxField.Items.Add(pField.Name);
}
// 将pFeatureCursor强制转换为ICursor接口,并赋值给mCursor变量
mCursor = pFeatureCursor as ICursor;
}
private void cbxField_SelectedIndexChanged(object sender, EventArgs e)
{
// 创建一个DataStatisticsClass的实例,用于统计数据的各项指标
IDataStatistics pDataStatistics = new DataStatisticsClass();
// 将pDataStatistics的Cursor属性设置为mCursor,表示要对mCursor中的数据进行统计
pDataStatistics.Cursor = mCursor;
// 设置pDataStatistics要统计的字段为cbxField下拉列表中选中的项(转换为字符串)
pDataStatistics.Field = cbxField.SelectedItem.ToString();
// 调用pDataStatistics的Statistics属性来获取统计结果,并赋值给pStatisticsResults
IStatisticsResults pStatisticsResults = pDataStatistics.Statistics;
// 清空tbxResults文本框的内容
tbxResults.Clear();
// 在tbxResults文本框中添加统计结果,包括要素个数、最大值、最小值、平均值、标准差和总和
tbxResults.Text = "要素个数:" + pStatisticsResults.Count +
"\r\n最大值:" + pStatisticsResults.Maximum +
"\r\n最小值:" + pStatisticsResults.Minimum +
"\r\n平均值:" + pStatisticsResults.Mean +
"\r\n标准差:" + pStatisticsResults.StandardDeviation +
"\r\n总和:" + pStatisticsResults.Sum;
}
书签页面
public partial class frmWenBenShuRu : Form
{
public frmWenBenShuRu()
{
InitializeComponent();
}
// 私有字段,存储书签名称
private string bookmarkName;
// 公共属性,用于获取和设置书签名称
public string BookmarkName
{
get { return bookmarkName; }
set { bookmarkName = value; }
}
// 私有字段,用于表示是否创建了书签(这里用0表示未创建,1表示已创建)
private int create = 0;
// 公共属性,用于获取和设置表示书签创建状态的整数值
public int Create
{
get { return create; }
set { create = value; }
}
// 当“确定”按钮被点击时触发的事件处理器
private void btnOK_Click(object sender, EventArgs e)
{
// 从文本框tbxName中获取文本
bookmarkName = tbxName.Text;
// 如果书签名称不为空
if (!string.IsNullOrEmpty(bookmarkName))
{
// 设置create字段为1,表示书签已创建
create = 1;
}
// 关闭窗体
this.Close();
}
// 当“取消”按钮被点击时触发的事件处理器
private void btnCancel_Click(object sender, EventArgs e)
{
// 关闭窗体
this.Close();
}
private void tbxName_TextChanged(object sender, EventArgs e)
{
}