Mega Code Archive

 
Categories / C# Tutorial / Reflection
 

Assembly Tree Viewer

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Reflection; using System.Text;   public class Form1 : System.Windows.Forms.Form   {         private System.Windows.Forms.MainMenu mainMenu1  = new System.Windows.Forms.MainMenu();         private System.Windows.Forms.MenuItem menuItem1 = new System.Windows.Forms.MenuItem();         private System.Windows.Forms.MenuItem mnuOpen = new System.Windows.Forms.MenuItem();         private System.Windows.Forms.OpenFileDialog openFileDialog1 = new System.Windows.Forms.OpenFileDialog();         private Assembly mAssembly;         private System.Windows.Forms.TreeView carAssembly = new System.Windows.Forms.TreeView();         private System.Windows.Forms.PropertyGrid pgObject = new System.Windows.Forms.PropertyGrid();     public Form1()     {             this.SuspendLayout();             this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {this.menuItem1});             this.menuItem1.Index = 0;             this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {this.mnuOpen});             this.menuItem1.Text = "&File";             this.mnuOpen.Index = 0;             this.mnuOpen.Text = "&Open";             this.mnuOpen.Click += new System.EventHandler(this.mnuOpen_Click);             this.openFileDialog1.CheckFileExists = false;             this.openFileDialog1.CheckPathExists = false;             this.openFileDialog1.Filter = "Assemblies|*.exe;*.dll";             this.openFileDialog1.ValidateNames = false;             this.carAssembly.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));             this.carAssembly.ImageIndex = -1;             this.carAssembly.Location = new System.Drawing.Point(8, 8);             this.carAssembly.Name = "carAssembly";             this.carAssembly.SelectedImageIndex = -1;             this.carAssembly.Size = new System.Drawing.Size(672, 400);             this.carAssembly.TabIndex = 0;             this.carAssembly.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.carAssembly_AfterSelect);             this.pgObject.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)                  | System.Windows.Forms.AnchorStyles.Left)                  | System.Windows.Forms.AnchorStyles.Right)));             this.pgObject.BackColor = System.Drawing.Color.Gray;             this.pgObject.CommandsBackColor = System.Drawing.Color.Gray;             this.pgObject.CommandsForeColor = System.Drawing.Color.Gray;             this.pgObject.CommandsVisibleIfAvailable = true;             this.pgObject.HelpBackColor = System.Drawing.Color.Gray;             this.pgObject.HelpForeColor = System.Drawing.Color.White;             this.pgObject.HelpVisible = false;             this.pgObject.LargeButtons = false;             this.pgObject.LineColor = System.Drawing.Color.Gray;             this.pgObject.Location = new System.Drawing.Point(8, 416);             this.pgObject.Name = "pgObject";             this.pgObject.Size = new System.Drawing.Size(672, 128);             this.pgObject.TabIndex = 1;             this.pgObject.Text = "propertyGrid1";             this.pgObject.ToolbarVisible = false;             this.pgObject.ViewBackColor = System.Drawing.Color.Gray;             this.pgObject.ViewForeColor = System.Drawing.Color.White;             this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);             this.ClientSize = new System.Drawing.Size(688, 553);             this.Controls.Add(this.pgObject);             this.Controls.Add(this.carAssembly);             this.Menu = this.mainMenu1;             this.Text = "Assembly Viewer";             this.ResumeLayout(false);         }     [STAThread]     static void Main()      {       Application.Run(new Form1());     }         private void mnuOpen_Click(object sender, System.EventArgs e)         {             if( openFileDialog1.ShowDialog(this) == DialogResult.OK )             {                 try                 {                     mAssembly = Assembly.LoadFile( openFileDialog1.FileName );                     PopulateTree();                 }                 catch( Exception ex )                 {                     MessageBox.Show( ex.Message );                  }             }         }         private void PopulateTree()         {             TreeNode newNode = new TreeNode( mAssembly.GetName().Name );             newNode.Tag = mAssembly;             carAssembly.Nodes.Add( newNode );             foreach( Module mod in mAssembly.GetModules() )             {                 AddModule( mod, newNode );             }         }         private void AddModule( Module mod, TreeNode parent )         {             TreeNode newNode = new TreeNode( mod.Name );             newNode.Tag = mod;             parent.Nodes.Add( newNode );             foreach( Type t in mod.GetTypes() )             {                 AddType( t, newNode );             }         }         private void AddType( Type t, TreeNode parent )         {             TreeNode newNode = new TreeNode( t.Name );             newNode.Tag = t;             TreeNode curType;             TreeNode curMember;             curType = new TreeNode( "Constructors" );             foreach( ConstructorInfo constructor in t.GetConstructors() )             {                 curMember = new TreeNode( constructor.Name );                 curMember.Tag = constructor;                 curType.Nodes.Add( curMember );             }             newNode.Nodes.Add( curType );             curType = new TreeNode( "Methods" );             foreach( MethodInfo method in t.GetMethods() )             {                 string methodString = method.Name + "( ";                 int count = method.GetParameters().Length;                 foreach( ParameterInfo param in method.GetParameters() )                 {                     methodString += param.ParameterType;                     if( param.Position < count-1 )                         methodString += ", ";                 }                 methodString += " )";                 curMember = new TreeNode( methodString );                 curMember.Tag = method;                 curType.Nodes.Add( curMember );             }             newNode.Nodes.Add( curType );             curType = new TreeNode( "Properties" );             foreach( PropertyInfo property in t.GetProperties() )             {                 curMember = new TreeNode( property.Name );                 curMember.Tag = property;                 curType.Nodes.Add( curMember );             }             newNode.Nodes.Add( curType );             curType = new TreeNode( "Fields" );             foreach( FieldInfo field in t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.GetField) )             {                 string fieldInfo = field.FieldType.Name;                 fieldInfo += " " + field.Name;                 curMember = new TreeNode( fieldInfo );                 curMember.Tag = field;                 curType.Nodes.Add( curMember );             }             newNode.Nodes.Add( curType );             curType = new TreeNode( "Events" );             foreach( EventInfo curEvent in t.GetEvents() )             {                 string eventInfo = curEvent.Name;                 eventInfo += " Delegate Type=" + curEvent.EventHandlerType;                 curMember = new TreeNode( eventInfo );                 curMember.Tag = curEvent;                 curType.Nodes.Add( curMember );             }             newNode.Nodes.Add( curType );             parent.Nodes.Add( newNode );         }         private void carAssembly_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)         {             if( e.Node.Tag != null )             {                 pgObject.SelectedObject = e.Node.Tag;             }             else             {                 pgObject.SelectedObject = null;             }         }   }