笨方法: OpenForm(formname) { switch(formaname) { case "from1": new... break; case "from2": new... break; } }这样可以么?
我是想给菜单项的tag赋值窗体的name,然后点击菜单项获取tag,打开相应窗体
menuStrip1.Items[i].Tag = new YourForm(); 仅供参考
OpenForm(formname) { assembly = Assembly.GetExecutingAssembly(); Type type = assembly.GetType(Item.tag.ToString(), true); if (type.IsSubclassOf(typeof(Form))) { Form o = (Form)assembly.CreateInstance(type.FullName); o.Show(); } } 要求tag的值为窗体的FullName,命名空间限定
Assembly assembly; public Form1() { InitializeComponent(); assembly = Assembly.GetExecutingAssembly(); foreach (Type item in assembly.GetTypes()) { if (item.IsSubclassOf(typeof(Form))) } } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { if (listBox1.SelectedIndex > -1) { Type type = assembly.GetType(listBox1.SelectedItem.ToString(), true); if (type.IsSubclassOf(typeof(Form))) { Form o = (Form)assembly.CreateInstance(type.FullName); o.Show(); } } } 俺测试的代码
#region 点击菜单项显示窗体 /// <summary> /// 点击菜单项显示窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CreateForm(string formName) { Assembly assembly = Assembly.GetExecutingAssembly(); Type type = assembly.GetType(formName, true); if (type.IsSubclassOf(typeof(Form))) { Form o = (Form)assembly.CreateInstance(type.FullName); o.Show(); } } #endregion form的name为frmTest,我调用CreateForm("frmText");在Type type = assembly.GetType(formName, true);出错了,
OpenForm(formname)
{
switch(formaname)
{
case "from1":
new...
break;
case "from2":
new...
break;
}
}这样可以么?
仅供参考
OpenForm(formname)
{
assembly = Assembly.GetExecutingAssembly();
Type type = assembly.GetType(Item.tag.ToString(), true);
if (type.IsSubclassOf(typeof(Form)))
{
Form o = (Form)assembly.CreateInstance(type.FullName);
o.Show();
}
} 要求tag的值为窗体的FullName,命名空间限定
Assembly assembly;
public Form1()
{
InitializeComponent();
assembly = Assembly.GetExecutingAssembly();
foreach (Type item in assembly.GetTypes())
{
if (item.IsSubclassOf(typeof(Form)))
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex > -1)
{ Type type = assembly.GetType(listBox1.SelectedItem.ToString(), true);
if (type.IsSubclassOf(typeof(Form)))
{
Form o = (Form)assembly.CreateInstance(type.FullName);
o.Show();
}
}
}
俺测试的代码
/// <summary>
/// 点击菜单项显示窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CreateForm(string formName)
{
Assembly assembly = Assembly.GetExecutingAssembly();
Type type = assembly.GetType(formName, true);
if (type.IsSubclassOf(typeof(Form)))
{
Form o = (Form)assembly.CreateInstance(type.FullName);
o.Show();
}
}
#endregion
form的name为frmTest,我调用CreateForm("frmText");在Type type = assembly.GetType(formName, true);出错了,