现有WINFORM程序中TreeView,包含如
tree1
tree11(Tag:Form1)
tree12(Tag:Form2)
tree13(Tag:Form3)
tree14(Tag:Form4)
tree2
tree21(Tag:Form5)
tree22(Tag:Form6)
tree23(Tag:Form7)
……
现在想每当用户点击某个子节点(如tree11)的时候就根据它的TAG属性实例化一个对象
如Form1 myForm = new Form1();如果节点不多的话还可以逐个进行Case判断后再决定实例化哪个
但是节点多达N个的时候(非数据库读取)就不太方便了
tree1
tree11(Tag:Form1)
tree12(Tag:Form2)
tree13(Tag:Form3)
tree14(Tag:Form4)
tree2
tree21(Tag:Form5)
tree22(Tag:Form6)
tree23(Tag:Form7)
……
现在想每当用户点击某个子节点(如tree11)的时候就根据它的TAG属性实例化一个对象
如Form1 myForm = new Form1();如果节点不多的话还可以逐个进行Case判断后再决定实例化哪个
但是节点多达N个的时候(非数据库读取)就不太方便了
frm123[0]=new yourfom1();
frm123[n-1]=new yourfomN();
frm123[n-1].ShowDialog();
tree11(Tag:Form1)
tree12(Tag:Form2)
tree13(Tag:Form3)
tree14(Tag:Form4)
tree2
tree21(Tag:Form5)
tree22(Tag:Form6)
tree23(Tag:Form7)
当用户点击的时候可以用treeView1.GetNodeAt(e.X,e.Y).Tag取得当前节点的TAG
比如取得Form1
这个时候我想实例化一个Form1类,不知道可不可以?
String FormName = (String)(treeView1.SelectedNode.Tag); //"Form1"
Type type = Type.GetType(FormName);
System.Reflection.Assembly a = System.Reflection.Assembly.GetAssembly(type);
Object obj = a.CreateInstance(FormName);
type.InvokeMember("Show",System.Reflection.BindingFlags.InvokeMethod,null,obj,null);
Type type = Type.GetType(FormName); 为null,还有什么办法?
已经解决了
方法如下:
private static Object objclass;
public static object GetInstance(string strClassName)
{
try
{
objclass = System.Activator.CreateInstance(System.Type.GetType(strClassName));
}
catch(Exception exmsg)
{
throw new Exception( "动态创建实例失败 \n\n=> " + strClassName , exmsg);
}
return objclass;
}
注意传入字符串的时候要把命名空间一起写进去
比如:
(System.Windows.Forms.UserControl)InstanceUserControl.GetInstance("Efuture.ESilkRoad."+treeView1.GetNodeAt(e.X,e.Y).Tag.ToString())