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#程序设计有所帮助。

(0)

相关推荐

  • C#窗体编程不显示最小化、最大化、关闭按钮的方法

    本文介绍在C#窗体编程时,如何设置不显示右上角的最小化最大化关闭按钮.可以通过this.ControlBox这个属性的值来控制. 在Windows的窗体编程中,基本上每一个窗体都是一个最小化.最大化和关闭按钮的.见惯了千篇一律,我们有时需要有一点新意,比如来把右上角的这最小化.最大化和关闭三个按钮去掉. 对于最大化和最小化按钮,在C#窗体开发时,各一个属性来启用或禁用这两个按钮.对于最大化来说,this.MaximizeBox=false即可禁用最大化按钮.而这里的this是指窗体对象本身.而t

  • C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法

    本文实例讲述了C# Winform实现捕获窗体最小化.最大化.关闭按钮事件的方法,主要是通过重写WndProc来实现的.分享给大家供大家参考.具体方法如下: 主要功能代码如下: const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE = 0xF020; const int SC_MAXIMIZE = 0xF030; protected override void WndProc(ref

  • 一个事半功倍的c#方法 动态注册按钮事件

    言归正传,下面就来讲讲怎样动态注册按钮事件. 首先,我们需要设置变量来获取点击一个数字按钮的值,以便在"="按钮单击事件中计算最终的结果.下面就是我开始的时候写的一段代码: 复制代码 代码如下: public double? value1 = null ;//获取运算符前的数值 public double? value2 = null ;//获取运算符前的数值 public type caltype=type .none ;//获取运算符 private void btnvalue1_

  • C#动态生成按钮及定义按钮事件的方法

    本文实例讲述了C#动态生成按钮及定义按钮事件的方法.分享给大家供大家参考.具体实现方法如下: 1.后台生成input的button按钮 复制代码 代码如下: HtmlGenericControl control = new HtmlGenericControl("input"); control.Attributes.Add("type", "button"); control.Attributes.Add("onclick"

  • C#利用反射技术实现去掉按钮选中时的边框效果

    本文实例讲述了C#利用反射技术实现去掉按钮选中时的边框效果.分享给大家供大家参考.具体如下: public void HideFocusCues(Control control) { Type vType = typeof(Control); FieldInfo vFieldInfo = vType.GetField("uiCuesState", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic |

  • C#键盘输入回车键实现点击按钮效果的方法

    本文实例讲述了C#键盘输入回车键实现点击按钮效果的方法,在C#项目开发中非常具有实用价值.分享给大家供大家参考. 具体实现方法如下: 把Form的KeyPreview设为true 然后设置KeyDown,KeyUp或KeyPress事件.在KeyDown事件中截获. 主要功能代码如下: this.KeyDown += new KeyEventHandler(textBox1_KeyDown); private void textBox1_KeyDown(object sender, KeyEve

  • c# winform取消右上角关闭按钮的实现方法

    一种方法是可以在窗体的属性面板将窗体的 ControlBox属性设置为false,或者在窗体的构造函数中这样写: 复制代码 代码如下: public Form1() { InitializeComponent(); this.ControlBox = false;   // 设置不出现关闭按钮 } 不过这样做的话,会连同最小化和最大化按钮都给弄掉了,所以,如果你想只想让关闭按钮不起作用,然后保留最小化.最大化的话,就重写窗体的CreateParams方法: 复制代码 代码如下: //禁用窗体的关

  • c#重写TabControl控件实现关闭按钮的方法

    1.c#里面的TabControl控件没有关闭按钮,而且很难看. 2.有一些已经做好的第三方控件,但是收费. 3.由于我的故障树推理诊断项目在绘图的时候允许同时打开多个文档进行操作,就要实现类似于浏览器的多标签功能,而且要可以关闭. 4.所以自己写一个类继承TabControl类,然后重写一些里面的方法即可实现. 5.特色:有关闭按钮,标签有背景颜色,选中的标签和没选中的颜色不一样,实现鼠标中键和右键的功能 先看我的项目中的完整代码,有很多代码是我的项目需要,可根据你的项目需求删减,核心的代码后

  • C#中Winform窗体Form的关闭按钮变灰色的方法

    本文实例讲述了C#中Winform窗体Form的关闭按钮变灰色的方法,对C#程序设计有一定的借鉴价值,分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: [ DllImport ( "USER32.DLL" ) ] public static extern int GetSystemMenu(int hwnd, int bRevert); [ DllImport ( "USER32.DLL" ) ] public static extern int Rem

  • C#实现利用反射简化给类字段赋值的方法

    本文实例讲述了C#实现利用反射简化给类字段赋值的方法.分享给大家供大家参考.具体分析如下: 说明:这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的 然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值   1.类的定义 namespace CCB_Donet.ClassFolder { public class FieldRuleInfo { public string gStrFNo; public string gStrFName; public string g

随机推荐