ArcObjects Library Reference  

MetadataViewer

About the TOCControl metadata viewer Sample

[C#]

MetadataViewer.cs

using System;
using System.IO;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS;

namespace MetadataViewer
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.OpenFileDialog openFileDialog1;
		private System.Windows.Forms.Button buttonLoad;
		private System.Windows.Forms.ComboBox cboStyleSheets;
		private System.Windows.Forms.Label label1;
		private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label3;

		private ITOCControl m_tocControl;
		private string m_tempFile;
		private string m_tempDir;
		private ILayer m_layer;
		private ESRI.ArcGIS.Controls.AxTOCControl axTOCControl1;
		private ESRI.ArcGIS.Controls.AxPageLayoutControl axPageLayoutControl1;
		private ESRI.ArcGIS.Controls.AxLicenseControl axLicenseControl1;
        private WebBrowser webBrowser1;

		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		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.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
            this.buttonLoad = new System.Windows.Forms.Button();
            this.cboStyleSheets = new System.Windows.Forms.ComboBox();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.axTOCControl1 = new ESRI.ArcGIS.Controls.AxTOCControl();
            this.axPageLayoutControl1 = new ESRI.ArcGIS.Controls.AxPageLayoutControl();
            this.axLicenseControl1 = new ESRI.ArcGIS.Controls.AxLicenseControl();
            this.webBrowser1 = new System.Windows.Forms.WebBrowser();
            ((System.ComponentModel.ISupportInitialize)(this.axTOCControl1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.axPageLayoutControl1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.axLicenseControl1)).BeginInit();
            this.SuspendLayout();
            // 
            // buttonLoad
            // 
            this.buttonLoad.Location = new System.Drawing.Point(8, 8);
            this.buttonLoad.Name = "buttonLoad";
            this.buttonLoad.Size = new System.Drawing.Size(176, 48);
            this.buttonLoad.TabIndex = 2;
            this.buttonLoad.Text = "Load Document";
            this.buttonLoad.Click += new System.EventHandler(this.button1_Click);
            // 
            // cboStyleSheets
            // 
            this.cboStyleSheets.Location = new System.Drawing.Point(550, 23);
            this.cboStyleSheets.Name = "cboStyleSheets";
            this.cboStyleSheets.Size = new System.Drawing.Size(326, 21);
            this.cboStyleSheets.TabIndex = 6;
            this.cboStyleSheets.SelectedIndexChanged += new System.EventHandler(this.cboStyleSheets_SelectedIndexChanged);
            // 
            // label1
            // 
            this.label1.ForeColor = System.Drawing.SystemColors.Highlight;
            this.label1.Location = new System.Drawing.Point(192, 8);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(296, 16);
            this.label1.TabIndex = 8;
            this.label1.Text = "1) Load a map document into the PageLayoutControl";
            // 
            // label2
            // 
            this.label2.ForeColor = System.Drawing.SystemColors.Highlight;
            this.label2.Location = new System.Drawing.Point(192, 24);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(296, 16);
            this.label2.TabIndex = 9;
            this.label2.Text = "2) Select a style sheet or enter the file path to style sheet";
            // 
            // label3
            // 
            this.label3.ForeColor = System.Drawing.SystemColors.Highlight;
            this.label3.Location = new System.Drawing.Point(192, 40);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(336, 16);
            this.label3.TabIndex = 10;
            this.label3.Text = "3) Right click a layer on the TOCControl to display its metadata";
            // 
            // axTOCControl1
            // 
            this.axTOCControl1.Location = new System.Drawing.Point(12, 62);
            this.axTOCControl1.Name = "axTOCControl1";
            this.axTOCControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axTOCControl1.OcxState")));
            this.axTOCControl1.Size = new System.Drawing.Size(178, 412);
            this.axTOCControl1.TabIndex = 12;
            this.axTOCControl1.OnMouseDown += new ESRI.ArcGIS.Controls.ITOCControlEvents_Ax_OnMouseDownEventHandler(this.axTOCControl1_OnMouseDown);
            // 
            // axPageLayoutControl1
            // 
            this.axPageLayoutControl1.Location = new System.Drawing.Point(196, 64);
            this.axPageLayoutControl1.Name = "axPageLayoutControl1";
            this.axPageLayoutControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axPageLayoutControl1.OcxState")));
            this.axPageLayoutControl1.Size = new System.Drawing.Size(348, 410);
            this.axPageLayoutControl1.TabIndex = 13;
            // 
            // axLicenseControl1
            // 
            this.axLicenseControl1.Enabled = true;
            this.axLicenseControl1.Location = new System.Drawing.Point(128, 96);
            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 = 14;
            // 
            // webBrowser1
            // 
            this.webBrowser1.Location = new System.Drawing.Point(550, 61);
            this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
            this.webBrowser1.Name = "webBrowser1";
            this.webBrowser1.Size = new System.Drawing.Size(326, 413);
            this.webBrowser1.TabIndex = 15;
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(888, 486);
            this.Controls.Add(this.webBrowser1);
            this.Controls.Add(this.axLicenseControl1);
            this.Controls.Add(this.axPageLayoutControl1);
            this.Controls.Add(this.axTOCControl1);
            this.Controls.Add(this.label3);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.cboStyleSheets);
            this.Controls.Add(this.buttonLoad);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
            this.Name = "Form1";
            this.Text = "MetadataViewer";
            this.Load += new System.EventHandler(this.Form1_Load);
            ((System.ComponentModel.ISupportInitialize)(this.axTOCControl1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.axPageLayoutControl1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.axLicenseControl1)).EndInit();
            this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
        [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)
		{
			m_tocControl = (ITOCControl) axTOCControl1.Object;
			
			//Set buddy control
			m_tocControl.SetBuddyControl(axPageLayoutControl1);

			//Get the directory of the executable
			m_tempDir = System.Reflection.Assembly.GetExecutingAssembly().Location;
			m_tempDir = Path.GetDirectoryName(m_tempDir); 
			//The location to save the temporary metadata
			m_tempFile = m_tempDir + "metadata.htm";
						
			//Add style sheets to the combo box
			cboStyleSheets.Items.Insert(0, @"Brief.xsl");
			cboStyleSheets.Items.Insert(1, @"Attributes.xsl");
			cboStyleSheets.Items.Insert(2, @"DataDictionTable.xsl");
			cboStyleSheets.Items.Insert(3, @"DataDictionPage.xsl");
			cboStyleSheets.SelectedIndex = 0;
		}

		private void ShowMetadata (ILayer layer)
		{
			if (layer is IDataLayer)
			{
				//Check style sheet exists
				if (File.Exists(cboStyleSheets.Text)== false)
				{
					System.Windows.Forms.MessageBox.Show("The selected style sheet does not exist!","Missing Style Sheet");
					return;
				}

				//QI for IDataLayer
				IDataLayer dataLayer = (IDataLayer) layer;
				//Get the metadata
				IMetadata metaData = (IMetadata) dataLayer.DataSourceName;
				//Get the xml property set from the metadata
				IXmlPropertySet2 xml = (IXmlPropertySet2) metaData.Metadata;
				
				//Save the xml to a temporary file and transforms it using the selected style sheet
				xml.SaveAsFile(cboStyleSheets.Text,"",false, ref m_tempFile );
				
				//Navigate the web browser to the temporary file
				object obj = null;
				webBrowser1.Navigate(m_tempFile);
			}
			else
			{
				System.Windows.Forms.MessageBox.Show("Metadata shown for IDataLayer objects only", "IDataLayer objects only");
			}
		}

		private void button1_Click(object sender, System.EventArgs e)
		{
			//Open a file dialog for selecting map documents
			openFileDialog1.Title = "Select Map Document";
			openFileDialog1.Filter = "Map Documents (*.mxd)|*.mxd";
			openFileDialog1.ShowDialog();

			// Exit if no map document is selected
			string sFilePath = openFileDialog1.FileName;
			if (sFilePath == "") return;

			// Load the specified mxd
			if (axPageLayoutControl1.CheckMxFile(sFilePath) == false) 
			{
				System.Windows.Forms.MessageBox.Show("This document cannot be loaded!");
				return;
			}
			axPageLayoutControl1.LoadMxFile(sFilePath, "");
			
			//Set the current directory to the that of the executable
			Directory.SetCurrentDirectory(m_tempDir);
		}

		private void cboStyleSheets_SelectedIndexChanged(object sender, System.EventArgs e)
		{
			//Show the metadata for the layer
			if (m_layer == null) return;
			ShowMetadata(m_layer);
		}

		private void axTOCControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e)
		{
			//Exit not a right mouse click
			if (e.button != 2) return;
			
			//Determine what kind of item has been clicked on
			esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;
			IBasicMap map = null;
			object other = null; object index = null;
			m_tocControl.HitTest(e.x, e.y, ref item, ref map, ref m_layer, ref other, ref index);
			
			//Show the metadata for the layer
			if (m_layer == null) return;
			ShowMetadata(m_layer);
		}
	}
}

[Visual Basic .NET]

MetadataViewer.vb

Imports System.IO
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Controls
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.SystemUI
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS
Public Class Form1
    Inherits System.Windows.Forms.Form

    Private m_pTocControl As ITOCControl
    Private m_sTempFile As String
    Private m_sTempDir As String
    Friend WithEvents WebBrowser1 As System.Windows.Forms.WebBrowser
    Private m_pLayer As ILayer

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()
        'Load runtime 
        If Not RuntimeManager.Bind(ProductCode.Engine) Then
            If Not RuntimeManager.Bind(ProductCode.Desktop) Then
                MessageBox.Show("Unable to bind to ArcGIS runtime. Application will be shut down.")
                System.Environment.Exit(1) ' Force exit or other indication in the application
            End If
        End If
        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        'Release COM objects
        ESRI.ArcGIS.ADF.COMSupport.AOUninitialize.Shutdown()

        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents label3 As System.Windows.Forms.Label
    Friend WithEvents label2 As System.Windows.Forms.Label
    Friend WithEvents label1 As System.Windows.Forms.Label
    Friend WithEvents cboStyleSheets As System.Windows.Forms.ComboBox
    Friend WithEvents buttonLoad As System.Windows.Forms.Button
    Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog
    Friend WithEvents AxPageLayoutControl1 As ESRI.ArcGIS.Controls.AxPageLayoutControl
    Friend WithEvents AxLicenseControl1 As ESRI.ArcGIS.Controls.AxLicenseControl
    Friend WithEvents AxTOCControl1 As ESRI.ArcGIS.Controls.AxTOCControl
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
        Me.label3 = New System.Windows.Forms.Label
        Me.label2 = New System.Windows.Forms.Label
        Me.label1 = New System.Windows.Forms.Label
        Me.cboStyleSheets = New System.Windows.Forms.ComboBox
        Me.buttonLoad = New System.Windows.Forms.Button
        Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog
        Me.AxPageLayoutControl1 = New ESRI.ArcGIS.Controls.AxPageLayoutControl
        Me.AxLicenseControl1 = New ESRI.ArcGIS.Controls.AxLicenseControl
        Me.AxTOCControl1 = New ESRI.ArcGIS.Controls.AxTOCControl
        Me.WebBrowser1 = New System.Windows.Forms.WebBrowser
        CType(Me.AxPageLayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit()
        CType(Me.AxLicenseControl1, System.ComponentModel.ISupportInitialize).BeginInit()
        CType(Me.AxTOCControl1, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'label3
        '
        Me.label3.ForeColor = System.Drawing.SystemColors.Highlight
        Me.label3.Location = New System.Drawing.Point(192, 40)
        Me.label3.Name = "label3"
        Me.label3.Size = New System.Drawing.Size(336, 16)
        Me.label3.TabIndex = 15
        Me.label3.Text = "3) Right click a layer on the TOCControl to display its metadata"
        '
        'label2
        '
        Me.label2.ForeColor = System.Drawing.SystemColors.Highlight
        Me.label2.Location = New System.Drawing.Point(192, 24)
        Me.label2.Name = "label2"
        Me.label2.Size = New System.Drawing.Size(296, 16)
        Me.label2.TabIndex = 14
        Me.label2.Text = "2) Select a style sheet or enter the file path to style sheet"
        '
        'label1
        '
        Me.label1.ForeColor = System.Drawing.SystemColors.Highlight
        Me.label1.Location = New System.Drawing.Point(192, 8)
        Me.label1.Name = "label1"
        Me.label1.Size = New System.Drawing.Size(296, 16)
        Me.label1.TabIndex = 13
        Me.label1.Text = "1) Load a map document into the PageLayoutControl"
        '
        'cboStyleSheets
        '
        Me.cboStyleSheets.Location = New System.Drawing.Point(547, 35)
        Me.cboStyleSheets.Name = "cboStyleSheets"
        Me.cboStyleSheets.Size = New System.Drawing.Size(329, 21)
        Me.cboStyleSheets.TabIndex = 12
        '
        'buttonLoad
        '
        Me.buttonLoad.Location = New System.Drawing.Point(8, 8)
        Me.buttonLoad.Name = "buttonLoad"
        Me.buttonLoad.Size = New System.Drawing.Size(176, 48)
        Me.buttonLoad.TabIndex = 11
        Me.buttonLoad.Text = "Load Document"
        '
        'AxPageLayoutControl1
        '
        Me.AxPageLayoutControl1.Location = New System.Drawing.Point(225, 64)
        Me.AxPageLayoutControl1.Name = "AxPageLayoutControl1"
        Me.AxPageLayoutControl1.OcxState = CType(resources.GetObject("AxPageLayoutControl1.OcxState"), System.Windows.Forms.AxHost.State)
        Me.AxPageLayoutControl1.Size = New System.Drawing.Size(316, 426)
        Me.AxPageLayoutControl1.TabIndex = 20
        '
        'AxLicenseControl1
        '
        Me.AxLicenseControl1.Enabled = True
        Me.AxLicenseControl1.Location = New System.Drawing.Point(128, 88)
        Me.AxLicenseControl1.Name = "AxLicenseControl1"
        Me.AxLicenseControl1.OcxState = CType(resources.GetObject("AxLicenseControl1.OcxState"), System.Windows.Forms.AxHost.State)
        Me.AxLicenseControl1.Size = New System.Drawing.Size(32, 32)
        Me.AxLicenseControl1.TabIndex = 21
        '
        'AxTOCControl1
        '
        Me.AxTOCControl1.Location = New System.Drawing.Point(12, 64)
        Me.AxTOCControl1.Name = "AxTOCControl1"
        Me.AxTOCControl1.OcxState = CType(resources.GetObject("AxTOCControl1.OcxState"), System.Windows.Forms.AxHost.State)
        Me.AxTOCControl1.Size = New System.Drawing.Size(207, 426)
        Me.AxTOCControl1.TabIndex = 22
        '
        'WebBrowser1
        '
        Me.WebBrowser1.Location = New System.Drawing.Point(547, 64)
        Me.WebBrowser1.MinimumSize = New System.Drawing.Size(20, 20)
        Me.WebBrowser1.Name = "WebBrowser1"
        Me.WebBrowser1.Size = New System.Drawing.Size(329, 426)
        Me.WebBrowser1.TabIndex = 23
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(888, 502)
        Me.Controls.Add(Me.WebBrowser1)
        Me.Controls.Add(Me.AxLicenseControl1)
        Me.Controls.Add(Me.AxTOCControl1)
        Me.Controls.Add(Me.AxPageLayoutControl1)
        Me.Controls.Add(Me.label3)
        Me.Controls.Add(Me.label2)
        Me.Controls.Add(Me.label1)
        Me.Controls.Add(Me.cboStyleSheets)
        Me.Controls.Add(Me.buttonLoad)
        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
        Me.Name = "Form1"
        Me.Text = "MetadataViewer"
        CType(Me.AxPageLayoutControl1, System.ComponentModel.ISupportInitialize).EndInit()
        CType(Me.AxLicenseControl1, System.ComponentModel.ISupportInitialize).EndInit()
        CType(Me.AxTOCControl1, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub buttonLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonLoad.Click
        'Open a file dialog for selecting map documents
        OpenFileDialog1.Title = "Select Map Document"
        OpenFileDialog1.Filter = "Map Documents (*.mxd)|*.mxd"
        OpenFileDialog1.ShowDialog()

        'Exit if no map document is selected
        Dim sFilePath As String
        sFilePath = OpenFileDialog1.FileName
        If (sFilePath = "") Then Exit Sub

        'Load the specified mxd
        If (AxPageLayoutControl1.CheckMxFile(sFilePath) = False) Then
            System.Windows.Forms.MessageBox.Show("This document cannot be loaded!")
            Exit Sub
        End If
        AxPageLayoutControl1.LoadMxFile(sFilePath, "")

        'Set the current directory to the that of the executable
        Directory.SetCurrentDirectory(m_sTempDir)
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        m_pTocControl = AxTOCControl1.Object

        'Set buddy control
        m_pTocControl.SetBuddyControl(AxPageLayoutControl1)

        'Get the directory of the executable
        m_sTempDir = System.Reflection.Assembly.GetExecutingAssembly().Location
        m_sTempDir = Path.GetDirectoryName(m_sTempDir)
        'The location to save the temporary metadata
        m_sTempFile = m_sTempDir + "metadata.htm"

        'Add style sheets to the combo box
        cboStyleSheets.Items.Insert(0, "Brief.xsl")
        cboStyleSheets.Items.Insert(1, "Attributes.xsl")
        cboStyleSheets.Items.Insert(1, "DataDictionTable.xsl")
        cboStyleSheets.Items.Insert(1, "DataDictionPage.xsl")
        cboStyleSheets.SelectedIndex = 0
    End Sub

    Private Sub ShowMetadata(ByVal pLayer As ILayer)

        If (TypeOf pLayer Is IDataLayer) Then

            'Check style sheet exists
            If (File.Exists(cboStyleSheets.Text) = False) Then
                System.Windows.Forms.MessageBox.Show("The selected style sheet does not exist!", "Missing Style Sheet")
                Exit Sub
            End If

            'QI for IDataLayer
            Dim pDataLayer As IDataLayer
            pDataLayer = pLayer
            'Get the metadata
            Dim pMetadata As IMetadata
            pMetadata = pDataLayer.DataSourceName
            'Get the xml property set from the metadata
            Dim pXML As IXmlPropertySet2
            pXML = pMetadata.Metadata

            'Save the xml to a temporary file and transforms it using the selected style sheet
            pXML.SaveAsFile(cboStyleSheets.Text, "", False, m_sTempFile)

            'Navigate the web browser to the temporary file
            WebBrowser1.Navigate(m_sTempFile)
        Else
            System.Windows.Forms.MessageBox.Show("Metadata shown for IDataLayer objects only", "IDataLayer objects only")
        End If

    End Sub

    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

    End Sub

    Private Sub cboStyleSheets_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboStyleSheets.SelectedIndexChanged
        'Show the metadata for the layer
        If (m_pLayer Is Nothing) Then Exit Sub
        ShowMetadata(m_pLayer)
    End Sub

    Private Sub AxTOCControl1_OnMouseDown(ByVal sender As System.Object, ByVal e As ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent) Handles AxTOCControl1.OnMouseDown
        'Exit not a right mouse click
        If (e.button <> 2) Then Exit Sub

        Dim pItem As esriTOCControlItem
        Dim pMap As Map = Nothing
        Dim pOther As Object = Nothing, pIndex As Object = Nothing

        'Determine what kind of item has been clicked on
        m_pTocControl.HitTest(e.x, e.y, pItem, CType(pMap, IBasicMap), m_pLayer, pOther, pIndex)

        'Show the metadata for the layer
        If (m_pLayer Is Nothing) Then Exit Sub
        ShowMetadata(m_pLayer)
    End Sub
End Class