我想将字符串表单名称转换为 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/