MapTips.cs
// Copyright 2010 ESRI // // All rights reserved under the copyright laws of the United States // and applicable international laws, treaties, and conventions. // // You may freely redistribute and use this sample code, with or // without modification, provided you include the original copyright // notice and use restrictions. // // See the use restrictions. // using System; using System.Windows.Forms; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.SystemUI; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS; namespace MapTips { public class Form1 : System.Windows.Forms.Form { public System.Windows.Forms.CheckBox chkShowTips; public System.Windows.Forms.Button cmdLoadData; public System.Windows.Forms.ComboBox cboDataField; public System.Windows.Forms.ComboBox cboDataLayer; public System.Windows.Forms.Label Label2; public System.Windows.Forms.Label Label1; public System.Windows.Forms.Button cmdFullExtent; public System.Windows.Forms.Label Label3; private System.Windows.Forms.OpenFileDialog openFileDialog1; private ESRI.ArcGIS.Controls.AxMapControl axMapControl1; private ESRI.ArcGIS.Controls.AxLicenseControl axLicenseControl1; internal CheckBox chkTransparent; private System.ComponentModel.IContainer components; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } protected override void Dispose( bool disposing ) { //Release COM objects ESRI.ArcGIS.ADF.COMSupport.AOUninitialize.Shutdown(); if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); this.chkShowTips = new System.Windows.Forms.CheckBox(); this.cmdLoadData = new System.Windows.Forms.Button(); this.cboDataField = new System.Windows.Forms.ComboBox(); this.cboDataLayer = new System.Windows.Forms.ComboBox(); this.Label2 = new System.Windows.Forms.Label(); this.Label1 = new System.Windows.Forms.Label(); this.cmdFullExtent = new System.Windows.Forms.Button(); this.Label3 = new System.Windows.Forms.Label(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.axMapControl1 = new ESRI.ArcGIS.Controls.AxMapControl(); this.axLicenseControl1 = new ESRI.ArcGIS.Controls.AxLicenseControl(); this.chkTransparent = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.axMapControl1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.axLicenseControl1)).BeginInit(); this.SuspendLayout(); // // chkShowTips // this.chkShowTips.BackColor = System.Drawing.SystemColors.Control; this.chkShowTips.Cursor = System.Windows.Forms.Cursors.Default; this.chkShowTips.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.chkShowTips.ForeColor = System.Drawing.SystemColors.ControlText; this.chkShowTips.Location = new System.Drawing.Point(8, 40); this.chkShowTips.Name = "chkShowTips"; this.chkShowTips.RightToLeft = System.Windows.Forms.RightToLeft.No; this.chkShowTips.Size = new System.Drawing.Size(129, 25); this.chkShowTips.TabIndex = 10; this.chkShowTips.Text = "Show Map Tips"; this.chkShowTips.UseVisualStyleBackColor = false; this.chkShowTips.CheckedChanged += new System.EventHandler(this.chkShowTips_CheckedChanged); this.chkShowTips.CheckStateChanged += new System.EventHandler(this.chkShowTips_CheckStateChanged); // // cmdLoadData // this.cmdLoadData.BackColor = System.Drawing.SystemColors.Control; this.cmdLoadData.Cursor = System.Windows.Forms.Cursors.Default; this.cmdLoadData.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.cmdLoadData.ForeColor = System.Drawing.SystemColors.ControlText; this.cmdLoadData.Location = new System.Drawing.Point(8, 8); this.cmdLoadData.Name = "cmdLoadData"; this.cmdLoadData.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cmdLoadData.Size = new System.Drawing.Size(113, 25); this.cmdLoadData.TabIndex = 9; this.cmdLoadData.Text = "Load Document..."; this.cmdLoadData.UseVisualStyleBackColor = false; this.cmdLoadData.Click += new System.EventHandler(this.cmdLoadData_Click); // // cboDataField // this.cboDataField.BackColor = System.Drawing.SystemColors.Window; this.cboDataField.Cursor = System.Windows.Forms.Cursors.Default; this.cboDataField.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.cboDataField.ForeColor = System.Drawing.SystemColors.WindowText; this.cboDataField.Location = new System.Drawing.Point(176, 40); this.cboDataField.Name = "cboDataField"; this.cboDataField.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cboDataField.Size = new System.Drawing.Size(161, 22); this.cboDataField.TabIndex = 8; this.cboDataField.SelectedIndexChanged += new System.EventHandler(this.cboDataField_SelectedIndexChanged); // // cboDataLayer // this.cboDataLayer.BackColor = System.Drawing.SystemColors.Window; this.cboDataLayer.Cursor = System.Windows.Forms.Cursors.Default; this.cboDataLayer.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.cboDataLayer.ForeColor = System.Drawing.SystemColors.WindowText; this.cboDataLayer.Location = new System.Drawing.Point(176, 16); this.cboDataLayer.Name = "cboDataLayer"; this.cboDataLayer.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cboDataLayer.Size = new System.Drawing.Size(161, 22); this.cboDataLayer.TabIndex = 7; this.cboDataLayer.SelectedIndexChanged += new System.EventHandler(this.cboDataLayer_SelectedIndexChanged); // // Label2 // this.Label2.BackColor = System.Drawing.SystemColors.Control; this.Label2.Cursor = System.Windows.Forms.Cursors.Default; this.Label2.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Label2.ForeColor = System.Drawing.SystemColors.ControlText; this.Label2.Location = new System.Drawing.Point(136, 40); this.Label2.Name = "Label2"; this.Label2.RightToLeft = System.Windows.Forms.RightToLeft.No; this.Label2.Size = new System.Drawing.Size(33, 17); this.Label2.TabIndex = 12; this.Label2.Text = "Fields:"; // // Label1 // this.Label1.BackColor = System.Drawing.SystemColors.Control; this.Label1.Cursor = System.Windows.Forms.Cursors.Default; this.Label1.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Label1.ForeColor = System.Drawing.SystemColors.ControlText; this.Label1.Location = new System.Drawing.Point(136, 16); this.Label1.Name = "Label1"; this.Label1.RightToLeft = System.Windows.Forms.RightToLeft.No; this.Label1.Size = new System.Drawing.Size(41, 17); this.Label1.TabIndex = 11; this.Label1.Text = "Layers:"; // // cmdFullExtent // this.cmdFullExtent.BackColor = System.Drawing.SystemColors.Control; this.cmdFullExtent.Cursor = System.Windows.Forms.Cursors.Default; this.cmdFullExtent.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.cmdFullExtent.ForeColor = System.Drawing.SystemColors.ControlText; this.cmdFullExtent.Location = new System.Drawing.Point(224, 365); this.cmdFullExtent.Name = "cmdFullExtent"; this.cmdFullExtent.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cmdFullExtent.Size = new System.Drawing.Size(113, 25); this.cmdFullExtent.TabIndex = 13; this.cmdFullExtent.Text = "Zoom to Full Extent"; this.cmdFullExtent.UseVisualStyleBackColor = false; this.cmdFullExtent.Click += new System.EventHandler(this.cmdFullExtent_Click); // // Label3 // this.Label3.BackColor = System.Drawing.SystemColors.Control; this.Label3.Cursor = System.Windows.Forms.Cursors.Default; this.Label3.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.Label3.ForeColor = System.Drawing.SystemColors.ControlText; this.Label3.Location = new System.Drawing.Point(8, 373); this.Label3.Name = "Label3"; this.Label3.RightToLeft = System.Windows.Forms.RightToLeft.No; this.Label3.Size = new System.Drawing.Size(209, 17); this.Label3.TabIndex = 14; this.Label3.Text = "Left mouse button to zoomin, right to pan"; // // axMapControl1 // this.axMapControl1.Location = new System.Drawing.Point(8, 88); this.axMapControl1.Name = "axMapControl1"; this.axMapControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axMapControl1.OcxState"))); this.axMapControl1.Size = new System.Drawing.Size(328, 272); this.axMapControl1.TabIndex = 15; this.axMapControl1.OnMouseDown += new ESRI.ArcGIS.Controls.IMapControlEvents2_Ax_OnMouseDownEventHandler(this.axMapControl1_OnMouseDown); // // axLicenseControl1 // this.axLicenseControl1.Enabled = true; this.axLicenseControl1.Location = new System.Drawing.Point(300, 68); this.axLicenseControl1.Name = "axLicenseControl1"; this.axLicenseControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axLicenseControl1.OcxState"))); this.axLicenseControl1.Size = new System.Drawing.Size(32, 32); this.axLicenseControl1.TabIndex = 16; // // chkTransparent // this.chkTransparent.AutoSize = true; this.chkTransparent.Location = new System.Drawing.Point(8, 65); this.chkTransparent.Name = "chkTransparent"; this.chkTransparent.Size = new System.Drawing.Size(106, 17); this.chkTransparent.TabIndex = 17; this.chkTransparent.Text = "Transparent Tips"; this.chkTransparent.UseVisualStyleBackColor = true; this.chkTransparent.CheckedChanged += new System.EventHandler(this.chkTransparent_CheckedChanged); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(344, 400); this.Controls.Add(this.chkTransparent); this.Controls.Add(this.axLicenseControl1); this.Controls.Add(this.axMapControl1); this.Controls.Add(this.cmdFullExtent); this.Controls.Add(this.Label3); this.Controls.Add(this.chkShowTips); this.Controls.Add(this.cmdLoadData); this.Controls.Add(this.cboDataField); this.Controls.Add(this.cboDataLayer); this.Controls.Add(this.Label2); this.Controls.Add(this.Label1); this.Name = "Form1"; this.Text = "Form1"; this.Load += new System.EventHandler(this.Form1_Load); ((System.ComponentModel.ISupportInitialize)(this.axMapControl1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.axLicenseControl1)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); } #endregion [STAThread] static void Main() { if (!RuntimeManager.Bind(ProductCode.Engine)) { if (!RuntimeManager.Bind(ProductCode.Desktop)) { MessageBox.Show("Unable to bind to ArcGIS runtime. Application will be shut down."); return; } } Application.Run(new Form1()); } private void Form1_Load(object sender, System.EventArgs e) { //Disable controls chkShowTips.Enabled = false; chkTransparent.Enabled = false; cboDataLayer.Enabled = false; cboDataField.Enabled = false; } private void cboDataLayer_SelectedIndexChanged(object sender, System.EventArgs e) { //Disable field combo if feature layer is not selected and exit if (axMapControl1.get_Layer(cboDataLayer.SelectedIndex) is IFeatureLayer == false) { cboDataField.Items.Clear(); cboDataField.Enabled = false; return; } //Get IFeatureLayer interface IFeatureLayer featureLayer = (IFeatureLayer) axMapControl1.get_Layer(cboDataLayer.SelectedIndex); //Query interface for ILayerFields ILayerFields layerFields = (ILayerFields) featureLayer; int j = 0; cboDataField.Items.Clear(); cboDataField.Enabled = true; //Loop through the fields for (int i = 0; i <= layerFields.FieldCount - 1; i++) { //Get IField interface IField field = layerFields.get_Field(i); //If the field is not the shape field if (field.Type != esriFieldType.esriFieldTypeGeometry) { //Add field name to the control cboDataField.Items.Insert(j, field.Name); //If the field name is the display field if (field.Name == featureLayer.DisplayField) { //Select the field name in the control cboDataField.SelectedIndex = j; } j = j + 1; } } ShowLayerTips(); } private void chkShowTips_CheckStateChanged(object sender, System.EventArgs e) { ShowLayerTips(); } private void cmdFullExtent_Click(object sender, System.EventArgs e) { //Zoom to full extent of data axMapControl1.Extent = axMapControl1.FullExtent; } private void cmdLoadData_Click(object sender, System.EventArgs e) { openFileDialog1.Title = "Browse Map Document"; openFileDialog1.Filter = "Map Documents (*.mxd)|*.mxd"; openFileDialog1.ShowDialog(); //Exit if no map document is selected string sFilePath = openFileDialog1.FileName; if (sFilePath == "") { return; } //Validate and load map document if (axMapControl1.CheckMxFile(sFilePath)== true) { axMapControl1.LoadMxFile(sFilePath,Type.Missing,""); //Enabled MapControl axMapControl1.Enabled = true; } else { MessageBox.Show(sFilePath + " is not a valid ArcMap document"); return; } //Add the layer names to combo cboDataLayer.Items.Clear(); for (int i = 0; i <= axMapControl1.LayerCount - 1; i++) { cboDataLayer.Items.Insert(i, axMapControl1.get_Layer(i).Name); } //Select first layer in control cboDataLayer.SelectedIndex = 0; //Enable controls if disabled if (chkShowTips.Enabled == false) chkShowTips.Enabled = true; if (chkTransparent.Enabled == false) chkTransparent.Enabled = true; if (cboDataLayer.Enabled == false) cboDataLayer.Enabled = true; if (cboDataField.Enabled == false) cboDataField.Enabled = true; } private void ShowLayerTips() { //Loop through the maps layers for (int i = 0; i <= axMapControl1.LayerCount - 1; i++) { //Get ILayer interface ILayer layer = axMapControl1.get_Layer(i); //If is the layer selected in the control if (cboDataLayer.SelectedIndex == i) { //If want to show map tips if (chkShowTips.CheckState == CheckState.Checked) { layer.ShowTips = true; } else { layer.ShowTips = false; } } else { layer.ShowTips = false; } } } private void cboDataField_SelectedIndexChanged(object sender, System.EventArgs e) { //Get IFeatureLayer interface IFeatureLayer featureLayer = (IFeatureLayer) axMapControl1.get_Layer(cboDataLayer.SelectedIndex); //Query interface for IlayerFields ILayerFields layerFields = (ILayerFields) featureLayer; //Loop through the fields for (int i = 0; i <= layerFields.FieldCount - 1; i++) { //Get IField interface IField field = layerFields.get_Field(i); //If the field name is the name selected in the control if (field.Name == cboDataField.Text) { //Set the field as the display field featureLayer.DisplayField = field.Name; break; } } } private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) { //If left mouse button zoom in if (e.button == 1) { axMapControl1.Extent = axMapControl1.TrackRectangle(); } //If right mouse button pan else if (e.button == 2) { axMapControl1.Pan(); } } private void chkShowTips_CheckedChanged(object sender, EventArgs e) { if (chkShowTips.CheckState == CheckState.Checked) axMapControl1.ShowMapTips = true; else axMapControl1.ShowMapTips = false; } private void chkTransparent_CheckedChanged(object sender, EventArgs e) { if (chkTransparent.CheckState == CheckState.Checked) axMapControl1.TipStyle = esriTipStyle.esriTipStyleTransparent; else axMapControl1.TipStyle = esriTipStyle.esriTipStyleSolid; } } }