我用的是c#.net平台新建一个windows 应用程序,然后如果右击form1窗体,选择查看代码,会出现如下namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}而如果是双击窗体则多出个private void Form1_Load(object sender, EventArgs e)函数来
namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        private void Form1_Load(object sender, EventArgs e)
        {        }
    }
}好像在 private void Form1_Load(object sender, EventArgs e)
        {        }
写的代码和在   public Form1()
        {
            InitializeComponent();
        }写的相同的代码都会产生相同的结果。那么, public Form1()与 private void Form1_Load(object sender, EventArgs e)有什么不一样?

解决方案 »

  1.   

    Form1()是构造函数,是当这个窗体实例产生的时候就会进行的一些初始化动作。Form_Load是这个窗体展示前的准备工作。Form1是窗体产生的最原始,第一步操作。
    Form_Load和Form1()之间还有很多的操作,本质上的差别是很大的。只不过这些操作一部分是通过你去设置,而你没有设置,另一部分系统自己完成;所以表象上看他们好像紧密连在一起。
      

  2.   

    做个测试:
    private void button1_Click(object sender, EventArgs e)
    {
        Form f = new Form(); // 构造的时候明显不能关联事件
        f.Load += new EventHandler(f_Load); // 构造结束才能关联事件
        //f.Show(); // 如果窗体不显示出来,Load事件不会触发
    }void f_Load(object sender, EventArgs e)
    {
        Console.WriteLine("Zswang");
    }实际上Load是在Form1()构造中的InitializeComponent();方法赋值的。
    this.Load += new System.EventHandler(this.Form1_Load);总之区别就是Form1()执行并不代表Load()被执行。参考测试代码的结果。Form1() Form1_Load()
      

  3.   

    执行顺序有前后差异,先执行构造函数,接下来才会去执行这个load函数