2015-06-02 53 views
0

有没有一种简洁的方式来从一个字符串创建一个UserControl?如何从一个字符串创建一个UserControl

我想避免硬编码是这样的:

if (tool.ToolName == "Image_Tool") { ctl = new Image_Tool() as UserControl; } 

Image_Tool是现有用户控件。从解析文件夹中获取ToolName以获取UserControl的文件名。

会喜欢做这样的事情:

UserControl ctl = new tool.toolName() as UserControl 

是,“天上掉馅饼”的思想? PHP有一种将字符串转换为变量的方法......想知道C#是否有办法做到这一点?

谢谢。

汉斯,想你的建议,但现在越来越TypeLoadException此代码:

ObjectHandle handle = Activator.CreateInstance("AutomationSystem", tool.ToolName); 
      Object o = handle.Unwrap(); 
      ctl = o as UserControl; 

这是一个Windows应用程序不是Web应用程序,所以不存在的DLL,只是exe文件。

+0

使用Activator.CreateInstance()。不要忘记命名空间的名称。 –

+0

汉斯,我一直在网上尝试不同的建议Activator.CreateInstance无济于事。我上面这样做的方式似乎它应该工作,但我得到的消息,在程序集中找不到Image_Tool(尝试null代替“AutomationSystem”,它发现当前程序集)。无法理解为什么Image_Tool在我可以分配UserControl变量时找不到= new Image_Tool()。没有代码问题有任何建议? – Radiohead

+0

请同事看看你的肩膀。非零的可能性,他会指着他的手指说:“哥们,你忘了命名空间的名字”。 –

回答

0

因此,汉斯是对的。我的命名空间出错了。以下是我如何解决这个问题:

ObjectHandle handle = Activator.CreateInstance(null, "AutomationSystem.Toolbox."+tool.ToolName); 
       Object o = handle.Unwrap(); 

       ctl = o as UserControl;