我有一个已启动的主窗体,然后它可以转到我创建的任何其他窗体。但是踢球者是我写了一个我调用的类,它返回一个带有要转到的表单名称的字符串。
目前我没有这个工作,所以我从形式到形式(静态编写的链接代码):
this.Hide();
CloudAccess nextForm1 = new CloudAccess();
//Where CloudAccess is the class of the next form.
nextForm1.ShowDialog();
我想要的是这样的:
FormController pick = new FormController();
//Where FormController is the Class I create an object of and ask what's next
string next = pick.whereToGo(); //lets say it returns "CloudAccess"
this.Hide();
next nextForm1 = new next(); //next is desired to be the contents of the string
nextForm1.ShowDialog();
问题是我不知道如何使用返回的字符串来创建新对象并使用它。我一直在关注像这样的Invoke和Reflection主题:Use string value to create new instance 但我是C#的新手,我不知道如何将其应用到这种情况。
思考?谢谢!
答案 0 :(得分:5)
以下是fejejosco所说的工作代码:
string asdf = "CloudAccess";
Type CAType = Type.GetType("namespace." + asdf);
Form nextForm2 = (Form)Activator.CreateInstance(CAType);
nextForm2.ShowDialog();
谢谢!
答案 1 :(得分:1)
获取表单的类型:Type.GetType("name.space." + formname)
,如果您的班级为name.space.CloudAccessForm
,则将CloudAccessForm
作为表单名传递,然后它会为您提供类型。然后,您可以使用Activator.CreateInstance(type)
对其进行实例化。然后将其投射到Form
,并显示它。