C# 动态显示表单

C# 动态显示表单,c#,.net,winforms,C#,.net,Winforms,请帮我解决这个问题。我有一个带按钮的动态菜单。每个按钮都有表单的名称(VP、VZPAL、PAL等)。当我单击某个按钮时,我想用该按钮的名称激活表单。我尝试使用此代码执行此操作,但其转义异常: 值不能为空 Formname的值是right(FISpanel.FormVP)。有什么想法吗?这就是我过去实现相同目标的方式。在我的应用程序中,我在.ini文件中设置了“链接”,但每个用户的链接可能不同,因此(和您一样),我需要一个解决方案,根据单击的内容启动表单: LinkLabel ln

请帮我解决这个问题。我有一个带按钮的动态菜单。每个按钮都有表单的名称(VP、VZPAL、PAL等)。当我单击某个按钮时,我想用该按钮的名称激活表单。我尝试使用此代码执行此操作,但其转义异常:

值不能为空


Formname的值是
right(FISpanel.FormVP)
。有什么想法吗?

这就是我过去实现相同目标的方式。在我的应用程序中,我在.ini文件中设置了“链接”,但每个用户的链接可能不同,因此(和您一样),我需要一个解决方案,根据单击的内容启动表单:

        LinkLabel lnk = (LinkLabel)sender;

        Type type = Type.GetType("Valhalla." + lnk.Tag.ToString());
        Form thisFrm = (Form)Activator.CreateInstance(type);

        // DISPLAY THE FORM //
        thisFrm.ShowDialog();

另外,正如@King所提到的。圆点很重要。表单的名称是:“FormVP”还是“VP”(等等)。如果是后者,则必须将其命名为:Form.VP而不是FormVP。

为什么要使用类型名称而不是类型本身?可能是您将错误的变量传递给type.GetType方法。请看,异常是来自这里的代码,还是来自表单本身?这似乎不是这段代码应该抛出的异常。把它放在一个
中,试试catch
并调试它。我把代码改为`Form frm=(Form)Activator.CreateInstance(Type.GetType(“FISpanel.Form”+b.Name.ToUpper());`但同样的结果是:(您的表单名称示例是什么?据我所知,
FISpanel
应该是您定义表单的名称空间。如果不是,那么这就是您的问题。
form+b.name
应该是您的表单名称,如果
b.name
是您的表单名称,那么
form
应该是
FISpanel
下的子名称空间,并且正确的string应该是
“FISpanel.Form.”+b.Name
(错过
Form
之后的句点)。
        LinkLabel lnk = (LinkLabel)sender;

        Type type = Type.GetType("Valhalla." + lnk.Tag.ToString());
        Form thisFrm = (Form)Activator.CreateInstance(type);

        // DISPLAY THE FORM //
        thisFrm.ShowDialog();