ControlType = "System.Windows.Forms.WindowsFormsApplication1." + "PictureBox1";
System.Reflection.Assembly asm;
asm = typeof(Form).Assembly;
ControlObject = (System.Windows.Forms.Control)asm.CreateInstance(ControlType);
ControlObject.Name = ControlName;
为我生成以下异常的下一个代码:
ControlObject.Name = ControlName;
NullReferenceException是unhandle 对象引用未设置为对象的实例。
答案 0 :(得分:4)
Assembly.CreateInstance
期待一个类型名称,您似乎在传递一个类型实例的名称(即名为PictureBox
的{{1}}。)。因此,PictureBox1
为ControlObject
,因此null
会抛出ControlObject.Name
。
目前尚不清楚你要做什么,但这就是你遇到问题的原因。如果您正在尝试创建NullReferenceException
的新实例,我不明白为什么您不只是说PictureBox
;这个类有一个公共无参数构造函数。或者,如果你坚持反思,你可以说
new PictureBox()
如果我们知道你要做什么,我们可以提供更多帮助,而不仅仅是抛出对我们无效的代码并期望我们解决世界饥饿问题。
此外,
controlType = PictureBox1.GetType();
controlObject = Activator.CreateInstance<Control>(controlType);
请将此变量重命名为ControlType = "System.Windows.Forms.WindowsFormsApplication1." + "PictureBox1";
。您应该使用camel case作为变量名称。
为什么您的应用程序类controlType
存在于系统命名空间WindowsFormsApplication1
中?不要这样做。
答案 1 :(得分:1)
你可能正在尝试写
ControlObject = new PictureBox();
答案 2 :(得分:0)
看起来CreateInstance返回null,这意味着在程序集中找不到该类型。 PictureBox1是一个类型还是一个对象?
答案 3 :(得分:0)
你的应用程序不在 System.Windows.Forms 命名空间
"System.Windows.Forms.WindowsFormsApplication1." + "PictureBox1"
尝试:
ControlObject = (System.Windows.Forms.Control)asm.CreateInstance(typeof(PictureBox));
或只是
ControlObject = new PictureBox();
创建一个新的控件实例。
或许您想在表单上找到现有的PictureBox控件?
答案 4 :(得分:0)
这意味着asm.CreateInstance(ControlType);
返回null。
因此,ControlType
的值不正确。它应该作为参数接收类型http://msdn.microsoft.com/en-us/library/dex1ss7c.aspx,并且您似乎正在发送实例PictureBox1
。
应为ControlType = "System.Windows.Forms.PictureBox";