首页 > 编程 > C# > 正文

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

2020-01-24 01:31:27
字体:
来源:转载
供稿:网友

本文实例讲述了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#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表