未处理NullReference异常。C#反射

未处理NullReference异常。C#反射,c#,C#,下一个代码为我生成了以下异常: ControlType = "System.Windows.Forms.WindowsFormsApplication1." + "PictureBox1"; System.Reflection.Assembly asm; asm = typeof(Form).Assembly; ControlObject = (System.Windows.Forms.Control)asm.CreateInstance(ControlType); ControlObject.

下一个代码为我生成了以下异常:

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;
NullReferenceException未处理
对象引用未设置为对象的实例。

看起来CreateInstance返回null,这意味着在程序集中找不到该类型。PictureBox1是类型还是对象?

看起来CreateInstance返回null,这意味着在程序集中找不到该类型。PictureBox1是一个类型还是一个对象?

程序集。CreateInstance
需要一个类型名称,而您似乎正在向它传递一个类型实例的名称(即名为
PictureBox1
PictureBox
)。因此,
ControlObject
null
,因此
ControlObject.Name
将抛出
NullReferenceException

现在还不清楚你想做什么,但这就是为什么你会遇到你所面临的问题。如果您正在尝试创建
PictureBox
的新实例,我不明白您为什么不直接说
new PictureBox()
;此类具有公共的无参数构造函数。或者,如果你坚持反思,你可以说

ControlObject.Name = ControlName;
  • 请将此变量重命名为
    controlType
    。您应该为变量名使用

  • 为什么应用程序类
    WindowsFormsApplication1
    位于系统名称空间
    system.Windows.Forms
    ?不要这样做


  • Assembly.CreateInstance
    需要一个类型名称,而您似乎正在向它传递类型实例的名称(即
    PictureBox
    命名为
    PictureBox1
    )。因此,
    ControlObject
    null
    ,因此
    ControlObject.Name
    将抛出
    NullReferenceException

    现在还不清楚你想做什么,但这就是为什么你会遇到你所面临的问题。如果您正在尝试创建
    PictureBox
    的新实例,我不明白您为什么不直接说
    new PictureBox()
    ;此类具有公共的无参数构造函数。或者,如果你坚持反思,你可以说

    ControlObject.Name = ControlName;
    
  • 请将此变量重命名为
    controlType
    。您应该为变量名使用

  • 为什么应用程序类
    WindowsFormsApplication1
    位于系统名称空间
    system.Windows.Forms
    ?不要这样做


  • 显然,您的应用程序不在System.Windows.Forms命名空间中

    ControlType = "System.Windows.Forms.WindowsFormsApplication1." + "PictureBox1";
    
    尝试:

    或者只是

    ControlObject = (System.Windows.Forms.Control)asm.CreateInstance(typeof(PictureBox));
    
    创建控件的新实例


    或者您想在表单上找到现有的PictureBox控件?

    很明显,您的应用程序不在System.Windows.Forms命名空间中

    ControlType = "System.Windows.Forms.WindowsFormsApplication1." + "PictureBox1";
    
    尝试:

    或者只是

    ControlObject = (System.Windows.Forms.Control)asm.CreateInstance(typeof(PictureBox));
    
    创建控件的新实例


    或者您想在表单上找到现有的PictureBox控件?

    您可能正在尝试编写

    ControlObject = new PictureBox();
    

    你可能想写点什么

    ControlObject = new PictureBox();
    

    这意味着
    asm.CreateInstance(ControlType)返回null

    因此,
    ControlType
    的值错误。它应该作为参数接收一个类型,并且似乎您正在发送一个实例
    PictureBox1


    它应该是
    ControlType=“System.Windows.Forms.PictureBox”

    表示
    asm.CreateInstance(ControlType)返回null

    因此,
    ControlType
    的值错误。它应该作为参数接收一个类型,并且似乎您正在发送一个实例
    PictureBox1


    它应该是
    ControlType=“System.Windows.Forms.PictureBox”

    你明白你要做什么吗?装配错误。您的自定义PictureBox1类不在system.Windows.Forms.dll框架程序集中。您是否理解要执行的操作?程序集错误。您的自定义PictureBox1类不在system.Windows.Forms.dll框架程序集中。问题是我有自己的类PictureBox1,该类具有重写的成员Paint@user:然后需要编写
    ControlObject=new PictureBox1()。问题是我有自己的类PictureBox1和重写的成员Paint@user:然后需要编写
    ControlObject=new PictureBox1()。谢谢大家。好的。但我认为通过这种方式(CreateInstance),我可以在png图像中获得透明的背景。对于PictureBox1,什么都不起作用。有人能帮忙吗?我的代码为透明重画绘画e.Graphics.DrawImage(绘画,x,y);controlType变量的类型是什么?Please@user432121:问一个单独的问题。Activator.CreateInstance(controlType);没有带1个参数的重载方法。我在MSDN中看到它带1个参数。但是typyze方法不支持。谢谢大家。好的。但我认为通过这种方式(CreateInstance),我可以在png图像中获得透明的背景。对于PictureBox1,什么都不起作用。有人能帮忙吗?我的代码为透明重画绘画e.Graphics.DrawImage(绘画,x,y);controlType变量的类型是什么?Please@user432121:问一个单独的问题。Activator.CreateInstance(controlType);没有带1个参数的重载方法。我在MSDN中看到它带1个参数。但典型分析方法不支持。