为什么拖放控件时,Winform需要用new实例,而WebForm就没有用?

我们在WInForm和WebForm程序中拖放控件的时候所产生的代码有一点不相同,那就是在WinFrom中会从新对拖放的控件使用new重新实例化控件,但是WebForm就不用,如:
WebForm下:protected System.Web.UI.WebControls.Button Button1;
WInForm下:private System.Windows.Forms.Button button1;
                       this.button1 = new System.Windows.Forms.Button();
关于这个问题请教了群里面的老大们,小鹏(ben)的解释非常方便我们理解和认识aspx,我在这里写出来,方便大家交流,如果还有不同意见方便我们及时重新认识。
小鹏(ben)说Windows From之所以需要重新实例化是因为它没有象WebForm中的aspx那种文件,WinForm里面的控件和窗体都是通过cs绘制出来的。而WebForm的aspx文件中的有些控件含有runat="server"属性,是服务器端控件,它们有id属性,在cs文件当中就会用类似protected System.Web.UI.WebControls.Button Button1;的语句来定义,它在cs文件中将控件实例但是又不用new,是因为这个实例是asp.net底层(解析器)通过Request[id]返来的对象,如果在aspx文件中没有 id="控件名" run at="server"的控件,而在cs文件中又有protected........ 控件名  的定义,在运行时,它就要在Request集里面找,如果找不到,它在看看程序中有没有使用new重新实例,如果都没有的话,在运行时就会产生如下错误:

未将对象引用设置到对象的实例。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:

行 43:    this.Button1.Click += new System.EventHandler(this.Button1_Click);

            行 44:    this.Load += new System.EventHandler(this.Page_Load);

            行 45:    this.Button2.Click+=new EventHandler(Button2_Click);

            行 46:

            行 47:   }
如果重新用new实例化,如:this.Button2=new Button;就不会产生上诉错误。

你可能感兴趣的:(WinForm)