我正在尝试使用Reflection在运行时创建控件。 在我的例子中,我得到一个像Label或Button的字符串,我想创建一个对象标签或按钮。
Assembly WinFormasm = Assembly.Load("System.Windows.Forms,Version=2.0.000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
Control label = (Control)Activator.CreateInstance(WinFormasm.GetType("System.Windows.Forms."+type));
当我执行此操作时,我收到错误:
找不到文件或程序集名称'System.Windows.Forms,Version = 2.0.000.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其中一个依赖项。
我真的不知道那里有什么问题。我也尝试过:
try
{
Type cntrl = Type.GetType("System.Windows.Forms.Button,System.Windows.Forms, Culture=neutral, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089", true);
label1.Text += cntrl.ToString() + " ";
}
catch(Exception e)
{
label1.Text += e.ToString() + " ";
}
尝试这个,我遇到了一个执行错误:他无法创建类型并返回null
。如果我将gettype字符串更改为System.Int32
,则可以正常工作。
如何使用字符串创建控件项?
答案 0 :(得分:2)
以下是什么问题?
Button cntrl = new Button();
如果您对这些值进行硬编码,为什么需要使用反射?
答案 1 :(得分:1)
您的版本号对于System.Windows.Forms来说是错误的:
var assembly = Assembly.Load("System.Windows.Forms, version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
然后要创建所需的控件类型,只需指定类型名称:
var type = "Button";
var control = (Control)Activator.CreateInstance(assembly.GetType("System.Windows.Forms." + type));
答案 2 :(得分:0)
从字符串
创建控件
你需要使用Activator
类
检查此link
答案 3 :(得分:0)
http://bytes.com/topic/c-sharp/answers/236152-how-create-control-instance-dynamicly-text有一个非常有意义的想法,通过对我有用的一点修复来解决问题。
我得到了那种类型的形式(控件以正确的形式站立),我得到了这个类型
从程序集中我通过使用我想要的控件类型的参数调用gettype
函数来获取对象
最后我将其转换为控件类型。
private Control createcontrol(string type)
{
Type typen = typeof(Form);
Assembly assem = typen.Assembly;
//Assembly assem = Assembly.LoadFrom(typeof(Form).ToString());
Type controlType = assem.GetType("System.Windows.Forms."+type); // GetType(controlType);
object obj = Activator.CreateInstance(controlType);
Control control = (Control)obj;
return control;
}
感谢帮助人员!
答案 4 :(得分:0)
string ControlType = "TextBox";
Assembly FormAssembly = Assembly.GetAssembly(typeof(Form));
Control MyControl = (Control)FormAssembly.CreateInstance("System.Windows.Forms." + ControlType);
只需更改ControlType
值。