在VS开发中,Windows Form中的构造函数跟Form1.Load()有什么区别和联系

1、任何一个类都会有构造函数,即使你没有写编译器也会隐式生成默认无参数构造函数,要调用一个类的任何方法(包括静态方法,静态方法会实例化一次静态构造),都会先调用构造函数(一个类的静态实例化在整个进程周期只调用一次)。
2、From窗体也是一个类,因此会先调用构造函数,而构造函数中的InitializeComponent()方法注册了Load事件,因此当触发Load事件时就会调用该事件注册的所有委托方法(
如: private void Form1_Load(object sender, EventArgs e)
),因此只要你明白构造函数、事件、委托等这些基本原理,那就懂得这些原理了。

3、如果VS没有提供相应设计器,都需要手写编写这些代码,那你就更容易懂得这些原理,而自动生成这些代码都是设计的功劳,所以很多初学者没有深入学习,每天都只是拖拖控件,双击控件生成相应事件,当遇到一些问题时总是无法解决,即使是简单的一些界面操作,设计器也可能会发生问题导致不正确的代码。以前的VS2003的From默认把所有代码都放在一文件里,但VS2005以后则把自动生成的代码与人工编写的代码分开存入不同的文件,这样更好方便管理代码,但很多初学者就不会去打开自动生成代码的文件,甚至不知道有那些代码。

简单一点理解:

         就是Windows Form中的构造函数是用来初始化窗体实例的,只有有了窗体实例,才会调用Form1.Load()事件,而构造函数中运行InitializeComponent() 方法时,VS为InitializeComponent()产生了如下代码:
...
this.Load += new System.EventHandler(this.Form1_Load);这时候才会生成Form1.Load(),也就是说,在form窗体中,是需要等到其他控件都初始化之后才加载Form1.Load()的

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows Forms 应用程序,`Form_Load` 事件是在窗体加载完成后触发的,即窗体构造函数执行完毕并且窗体已经准备好显示之后。如果你在 `Form_Load` 事件使用了异步操作(例如 `Task`),可能会导致代码不执行的问题。 这是因为在 `Form_Load` 事件使用异步操作时,主线程可能会在异步操作还未完成之前继续执行下面的代码,导致异步操作的代码不被执行。 解决这个问题的一种方法是使用 `async` 和 `await` 关键字来等待异步操作完成。你可以将异步操作放在一个单独的方法,并在 `Form_Load` 事件处理程序使用 `await` 等待异步方法完成。 下面是一个示例代码: ```csharp private async void Form_Load(object sender, EventArgs e) { await DoAsyncTask(); // 在异步任务完成后执行的代码 } private async Task DoAsyncTask() { // 异步任务的代码 await Task.Delay(1000); // 示例异步操作,延迟1秒 // 异步任务完成后的代码 } ``` 在这个示例,`DoAsyncTask` 方法是一个异步方法,它执行异步任务并等待一段时间(通过 `Task.Delay` 模拟)。在 `Form_Load` 事件处理程序,我们使用 `await` 关键字等待 `DoAsyncTask` 方法完成。这样,当异步任务完成后,才会继续执行 `Form_Load` 事件处理程序的剩余代码。 确保在 `Form_Load` 事件处理程序使用 `async` 关键字,并返回类型为 `void` 或 `Task`。同时,确保在异步方法前面加上 `await` 关键字以等待异步操作完成。这样你就可以在 `Form_Load` 事件正确地执行异步操作了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值