好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#通过反射获取当前工程中所有窗体并打开的方法

本文实例讲述了C#通过反射获取当前工程中所有窗体并打开的方法。分享给大家供大家参考。具体实现方法如下:

?

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace TestAppHelperMSDNSample

{

  static class Program

  {

   /// <summary>

   /// The main entry point for the application.

   /// </summary>

   [STAThread]

   static void Main()

   {

    Application.EnableVisualStyles();

    Application.SetCompatibleTextRenderingDefault( false );

    Form startup = new Form();

    startup.Text = "Choose a form to run" ;

    startup.Size = new System.Drawing.Size(300, 300);

    startup.StartPosition = FormStartPosition.CenterScreen;

    startup.Load += new EventHandler(startup_Load);

    ComboBox cboForms = new ComboBox();

    cboForms.Name = "cboForms" ;

    cboForms.DropDownStyle = ComboBoxStyle.DropDownList;

    cboForms.Size = new System.Drawing.Size(250, 20);

    cboForms.Location = new System.Drawing.Point(25, 75);

    startup.Controls.Add(cboForms);

    Button btnOpenForm = new Button();

    btnOpenForm.Text = "Open Form" ;

    btnOpenForm.Size = new System.Drawing.Size(100, 30);

    btnOpenForm.Location = new System.Drawing.Point(100, 150);

    btnOpenForm.Click += new EventHandler(btnOpenForm_Click);

    startup.Controls.Add(btnOpenForm);

    Application.Run(startup);

   }

   static void btnOpenForm_Click( object sender, EventArgs e)

   {

    ComboBox cbo = ((sender as Button).Parent as Form).Controls[ "cboForms" ] as ComboBox;

    Properties.Settings.Default.LastFormFullName = cbo.SelectedItem.ToString();

    Properties.Settings.Default.Save();

    Form f = Activator.CreateInstance(Type.GetType(cbo.SelectedItem.ToString())) as Form;

    f.ShowDialog();

   }

   static void startup_Load( object sender, EventArgs e)

   {

    ComboBox cbo = ((sender as Form).Controls[ "cboForms" ] as ComboBox);

    // load all the Forms in executing assembly

    Type[] types = System.Reflection.Assembly.GetExecutingAssembly().GetExportedTypes();

    foreach (Type t in types)

    {

     if (t.BaseType == typeof (Form))

     {

      cbo.Items.Add(t.FullName);

     }

    }

    // select the last used

    if (! string .IsNullOrEmpty(Properties.Settings.Default.LastFormFullName))

    {

     if (cbo.Items.Contains(Properties.Settings.Default.LastFormFullName))

     {

      int index = cbo.FindString(Properties.Settings.Default.LastFormFullName);

      if (index >= 0)

       cbo.SelectedIndex = index;

     }

    }

   }

  }

}

希望本文所述对大家的C#程序设计有所帮助。

dy("nrwz");

查看更多关于C#通过反射获取当前工程中所有窗体并打开的方法的详细内容...

  阅读:83次