c# - 将表单名称转换为c#.net中的表单对象

标签 c# winforms sql-server-2008

我想将字符串表单名称转换为 Winform 对象以显示表单。在项目中,字符串表单名称是从数据库头表中获取的,其构造函数是从其详细表中获取的。

这是表结构

   *HEADER TABLE*
    ID,Name

   *DETAIL TABLE*
   ID,Constructor_Name,Constructor_Value

最佳答案

一般来说。数据库和用户界面处于相反的两端,我建议不要存储实际的 winform 名称,而是存储一些字符串标记/枚举,并且只使用一个开关:

switch(formName) {
    case "OrderInfo": return new OrderInfoForm(ctorValue);
    case "CustomerSearch": return new CustomerSearchForm();
    // etc
}

严肃地说,上面的内容不是通常是一个很大的维护开销,而且静态类型使得很难出错。当您重构或切换到不同的 UI 实现时,它仍然可以工作。

但是,您可以使用反射。如果您有程序集限定的名称,则:

Type type = Type.GetType(name);

否则,如果只是命名空间限定,理想情况下您应该先获取程序集:

Assembly asm = typeof(SomeTypeInTheSameAssembly).Assembly;
Type type = asm.GetType(name);

然后简单地:

Form form = (Form)Activator.CreateInstance(type, ctorValues);

关于c# - 将表单名称转换为c#.net中的表单对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4084530/

相关文章:

sql - 以编程方式生成 SQL 脚本以在没有 PRIMARY 语句的情况下创建数据库..使用脚本程序

winforms - WinForm面板滚动没有滚动条?

Winforms DataGridView 显示空白行

c# - OnClosing 和 Form_Closing 或 OnLoad 和 Form_Load 之间的区别

javascript - 从 MS Sql 请求表 - Node.js Web 服务

sql - SSIS - 派生列

c# - AutoMapper IQueryable Extension 抛出 "Cannot compare elements of type <Complex Type>"

javascript - 自动刷新页面,数据不更新

c# - 从 C# 创建 COM 索引属性?

c# - 我该如何修复错误 : Type Form 1' already defines a member called ' Dispose' with the same parameter types?