5

C#でWindowsアプリケーションを使用していて、実行時に名前が文字列変数に保存されているフォームを呼び出す必要があります。

好き;

私はすでにフォームを持っています。Login.cs

string formToCall = "Login"
Show(formToCall)

これは可能ですか?

4

5 に答える 5

7

見てくださいActivator.CreateInstance(String, String)

Activator.CreateInstance("Namespace.Forms", "Login");

Assemblyクラスを(System.Reflection名前空間で)使用することもできます:

Assembly.GetExecutingAssembly().CreateInstance("Login");
于 2012-12-20T15:33:51.037 に答える
4

リフレクションの使用:

//note: this assumes all your forms are located in the namespace "MyForms" in the current assembly.

string formToCall = "Login"
var type = Type.GetType("MyForms." + formtocall);
var form = Activator.CreateInstance(type) as Form;

if (form != null)
   form.Show();
于 2012-12-20T15:34:03.403 に答える
2

より動的にするには、フォームを任意のフォルダーに配置できます。

public static void OpenForm(string FormName)
{
    var _formName = (from t in System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
                     where t.Name.Equals(FormName)
                     select t.FullName).Single();
    var _form = (Form)Activator.CreateInstance(Type.GetType(_formName));
    if (_form != null) 
    _form.Show();
}
于 2016-11-15T08:45:21.567 に答える
1

これを試して:

var form = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(formToCall);
form.Show();
于 2012-12-20T15:33:25.907 に答える