c# - 如何使用反射在容器内动态创建表单?
问题描述
我正在尝试创建一个能够创建给定表单的一个实例的通用库。我正在使用 WeifenLuo 库。
在主窗体中,有一个停靠容器。如果我直接在方法中创建一个实例,它就起作用了。但是,当我调用我的通用方法时,它会在容器外显示新的表单。
private void button1_Click(object sender, EventArgs e)
{
// This works and put the new form inside the container
Form1 form = new Form1();
form.Show(mainFormDockPanel);
// This just create the new form and open it outside the container
//Forms.OpenForm<Form1>(this.mainFormDockPanel);
Debug.WriteLine("Content: " + mainFormDockPanel.Contents.Count);
}
这是通用函数:
public static void OpenForm<T>(DockPanel dockPanel, T form = null, object obj = null, bool maximized = false) where T : class, new()
{
CreateMainForm();
// Search for open forms
foreach (DockContent frm in dockPanel).Contents)
{
// Verify if the content exists
if (frm.GetType() == typeof(T) && obj == null)
{
frm.Activate();
return;
}
// Check if the pressed button has a form
if (obj != null && frm.GetType() == obj.GetType())
{
frm.Activate();
return;
}
}
if (form == null)
{
form = new T();
}
if (maximized)
(form as DockContent).WindowState = FormWindowState.Maximized;
Type type = typeof(T);
MethodInfo methodInfo = type.GetMethod("Show", new Type[] { typeof(IWin32Window) });
methodInfo.Invoke(form, new object[] { dockPanel });
}
你们知道我错过了什么吗?
提前致谢!
解决方案
推荐阅读
- javascript - 使用 puppeteer 获取元素和文本列表
- python - 没有名为错误的模块。如何从不同目录的 python 中的 .pyx 文件导入函数?
- jquery-ui - Jquery Autocomplete 错误 menuselect 和 menufocus 无法读取未定义的属性值
- ios - iOS 使用 Agora 语音通话加入和离开频道时状态栏显示为红色
- php - 在php中进行求和时如何处理空值
- python - Runtime.ImportModuleError:无法导入模块“lambda_function”:没有名为“httplib2”的模块
- laravel - 如何在laravel中显示具有yajra数据表多对多关系的数据?
- hadoop - 为什么 cloudera 5.12 vm 中的默认复制因子为 1,而在以前的版本中为 3?
- swift - 向现有项目添加共享扩展。所以已经存在的项目 pod 开始出现错误
- python - 如何将字体标签设置为 Helvetica 并使用 matplotlib 重新设计轴标签文本