📄 layerpropertiescontrol.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geometry;
namespace LayerPropertiesControl
{
public partial class AxLayerPropertiesControl : UserControl
{
private IMapControl2 m_pMapControl;
/// <summary>
/// //////////////////////////////////////////
/// </summary>
private bool hasInitaled=false;//初始化状态
private bool hasChanged_AliasName = false;
public IMapControl4 MapControl
{
set
{
m_pMapControl = value;
if (m_pMapControl == null)
{
throw new ArgumentNullException();
}
InitLayerGridView();
}
}
/// <summary>
/// ///////////////////////////////////////////////
/// </summary>
public AxLayerPropertiesControl()
{
InitializeComponent();
}
private void AxLayerPropertiesControl_Load(object sender, EventArgs e)
{
hasInitaled = true;
}
public void InitLayerGridView()
{
layerGridView.Rows.Clear();
//////////////////////////////
ILayer pLayer;
for (int i = 0; i < m_pMapControl.LayerCount; i++)
{
pLayer = m_pMapControl.get_Layer(i);
IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
string strName = (pFeatureLayer.FeatureClass as IDataset).Name; //图层名
string strAliasName = pFeatureLayer.FeatureClass.AliasName; //图层别名
bool isSelectalbe = pFeatureLayer.Selectable; //图层是否可选
bool isVisible = pFeatureLayer.Visible; //图层是否可见
IDataset pDataset=pFeatureLayer.FeatureClass as IDataset;
string strDataSource=pDataset.Workspace.PathName; //数据路径
//图层符号样式
Bitmap bm = StyleGalleryItemToBmp(30, 20,pLayer);
object[] obj ={ strName, strAliasName, isVisible,isSelectalbe, bm, strDataSource };
layerGridView.Rows.Add(obj);
}
}
private void layerGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
//事件处理程序调用 CommitEdit 方法以引发 CellValueChanged 事件,并确定 DataGridViewCheckBoxCell 的当前值。
layerGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void layerGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (hasInitaled)
{
if (e.ColumnIndex == 2)
{
bool isVisible;
isVisible = (bool)layerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
m_pMapControl.get_Layer(e.RowIndex).Visible = isVisible;
m_pMapControl.ActiveView.Refresh();
}
if (e.ColumnIndex==3)
{
bool isSelectalbe;
isSelectalbe = (bool)layerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
IFeatureLayer pFeatureLayer = m_pMapControl.get_Layer(e.RowIndex) as IFeatureLayer;
pFeatureLayer.Selectable = isSelectalbe;
}
if (e.ColumnIndex == 1)
{
hasChanged_AliasName = true;
}
}
}
private void layerGridView_CellLeave(object sender, DataGridViewCellEventArgs e)
{
//对于文本的修改使用CellLeave事件。其中加入了有关文本内容是否改变的验测,使用了变量hasChanged_AliasName。
if (e.ColumnIndex == 1&&hasChanged_AliasName)
{
string strNewAliasName;
IFeatureLayer pFeatureLayer;
IClassSchemaEdit pClassSchemaEdit;
strNewAliasName = (string)layerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
pFeatureLayer = m_pMapControl.get_Layer(e.RowIndex) as IFeatureLayer;
if (strNewAliasName != null)
{
pClassSchemaEdit = pFeatureLayer.FeatureClass as IClassSchemaEdit;
pClassSchemaEdit.AlterAliasName(strNewAliasName);
}
else
{
layerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = pFeatureLayer.FeatureClass.AliasName;
}
hasChanged_AliasName = false;
}
}
//private Image SymbolToPicture(ILayer layer)
//{
// IFeatureLayer pFeatureLayer = layer as IFeatureLayer;
// IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)pFeatureLayer;
// ISimpleRenderer pSimpleRenderer = (ISimpleRenderer)pGeoFeatureLayer.Renderer;
// ISymbol pSybol = pSimpleRenderer.Symbol;
// IStyleGalleryItem pStyleGalleryItem = new ServerStyleGalleryItem();
// pStyleGalleryItem.Item = pSybol;
// esriSymbologyStyleClass pStyleClass=new esriSymbologyStyleClass();
// switch (pFeatureLayer.FeatureClass.ShapeType)
// {
// case esriGeometryType.esriGeometryPoint:
// pStyleClass = esriSymbologyStyleClass.esriStyleClassMarkerSymbols;
// break;
// case esriGeometryType.esriGeometryPolyline:
// pStyleClass=esriSymbologyStyleClass.esriStyleClassLineSymbols;
// break;
// case esriGeometryType.esriGeometryPolygon:
// pStyleClass = esriSymbologyStyleClass.esriStyleClassFillSymbols;
// break;
// default: break;
// }
// ISymbologyStyleClass pSymbologyStyleClass = axSymbologyControl1.GetStyleClass(pStyleClass);
// //显示符号的图象
// stdole.IPictureDisp picture = pSymbologyStyleClass.PreviewItem(pStyleGalleryItem,40, 20);//pictureBox1.Width, pictureBox1.Height);
// System.Drawing.Image image = System.Drawing.Image.FromHbitmap(new System.IntPtr(picture.Handle));
// return image;
//}
private System.Drawing.Bitmap StyleGalleryItemToBmp(
int iWidth,
int iHeight,
ILayer layer)
{
IFeatureLayer pFeatureLayer = layer as IFeatureLayer;
IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)pFeatureLayer;
ISimpleRenderer pSimpleRenderer = pGeoFeatureLayer.Renderer as ISimpleRenderer;
if (pSimpleRenderer == null)
{
return null;
}
ISymbol pSybol = pSimpleRenderer.Symbol;
IStyleGalleryItem pStyleGalleryItem = new ServerStyleGalleryItem();
pStyleGalleryItem.Item = pSybol;
IStyleGalleryClass pStyleGalleryClass = null;
switch (pFeatureLayer.FeatureClass.ShapeType)
{
case esriGeometryType.esriGeometryPoint:
pStyleGalleryClass = new MarkerSymbolStyleGalleryClassClass();
break;
case esriGeometryType.esriGeometryPolyline:
pStyleGalleryClass = new LineSymbolStyleGalleryClassClass();
break;
case esriGeometryType.esriGeometryPolygon:
pStyleGalleryClass = new FillSymbolStyleGalleryClassClass();
break;
default: break;
}
Bitmap bmp = new Bitmap(iWidth, iHeight);
Graphics gImage = Graphics.FromImage(bmp);
ESRI.ArcGIS.Display.tagRECT rect = new ESRI.ArcGIS.Display.tagRECT();
rect.right = bmp.Width;
rect.bottom = bmp.Height;
//生成预览
System.IntPtr hdc = new IntPtr();
hdc = gImage.GetHdc();
pStyleGalleryClass.Preview(pStyleGalleryItem.Item, hdc.ToInt32(), ref rect);
gImage.ReleaseHdc(hdc);
gImage.Dispose();
return bmp;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -