C#でWindowsアプリケーションを使用していて、実行時に名前が文字列変数に保存されているフォームを呼び出す必要があります。
好き;
私はすでにフォームを持っています。Login.cs
string formToCall = "Login"
Show(formToCall)
これは可能ですか?
見てくださいActivator.CreateInstance(String, String)
:
Activator.CreateInstance("Namespace.Forms", "Login");
Assembly
クラスを(System.Reflection
名前空間で)使用することもできます:
Assembly.GetExecutingAssembly().CreateInstance("Login");
リフレクションの使用:
//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();
より動的にするには、フォームを任意のフォルダーに配置できます。
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();
}
これを試して:
var form = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(formToCall);
form.Show();