当前位置: 首页 > 编程笔记 >

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

戚育
2023-03-14
本文向大家介绍C#通过反射获取当前工程中所有窗体并打开的方法,包括了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#程序设计有所帮助。

 类似资料:
  • 本文向大家介绍C#通过反射打开相应窗体方法分享,包括了C#通过反射打开相应窗体方法分享的使用技巧和注意事项,需要的朋友参考一下 C#单击菜单栏或工具栏时通过反射打开窗体的方法,可以以取代长长的if-else或switch-case语句。要点:将菜单或工具栏项的名称设置为与相应窗体名称相同(关键)。 如果我们的一个窗体里有N个窗体,或者是有一Tree需要对应的调用N个窗体话,如果使用IF ELse方

  • 本文向大家介绍C#获取所有进程的方法,包括了C#获取所有进程的方法的使用技巧和注意事项,需要的朋友参考一下 在使用C#进行相关编程的时候,有时候我们需要获取系统相关的进程信息。那么在C#中如何获取系统的所有进程那?下面请跟小编一起来操作。 1、首先新建一个控制台程序,这里主要是为了方便演示,控制台程序相对比较简单,如下图所示: 2、然后导入进程相关的操作类,主要是diagnostics,如下图所示

  • 主要内容:结构体字段类型,获取成员反射信息任意值通过 reflect.TypeOf() 获得反射对象信息后,如果它的类型是结构体,可以通过反射值对象(reflect.Type)的 NumField() 和 Field() 方法获得结构体成员的详细信息。与成员获取相关的 reflect.Type 的方法如下表所示。 结构体成员访问的方法列表 方法 说明 Field(i int) StructField 根据索引,返回索引对应的结构体字段的信

  • 问题内容: 我有一个这样声明的枚举: 现在,我想通过反射找出该枚举的键(SystemRunning,SystemStopped,tmpIdle): 输出为:RUNNING STOPPED IDLE 但是,我想使用Strings SystemRunning,tmpIdle等。 提前非常感谢您。 问题答案: 首先,您需要使您的非静态变量。 然后,您需要在枚举中添加getter方法,该方法将返回 然后将

  • 主要内容:使用反射值对象包装任意值,从反射值对象获取被包装的值当我们将一个接口值传递给一个 reflect.ValueOf 函数调用时,此调用返回的是代表着此接口值的动态值的一个 reflect.Value 值。我们必须通过间接的途径获得一个代表一个接口值的 reflect.Value 值。 reflect.Value 类型有很多方法( https://golang.google.cn/pkg/reflect/)。我们可以调用这些方法来观察和操纵一个 ref

  • 问题内容: 考虑以下代码: 我对标有的参数的值感兴趣。假设我已经通过反射(使用)弄清楚了哪个方法参数具有注释。(我知道这是参数列表中的第三个参数。) 现在如何检索值以进一步使用? 问题答案: 你不能 反射无法访问局部变量,包括方法参数。 如果您需要该功能,则需要拦截方法调用,可以通过以下几种方法之一进行操作: AOP(AspectJ / Spring AOP等) 代理(JDK,CGLib等) 在所