winform程序页面打开初始化时各事件的执行顺序

话不多说,直入主题。
众所周知,winform程序启动必须通过main函数入口来启动,新打开一个form窗体要通过main函数中执行Application.Run() 方法来启动(如:Application.Run(new Form1());).在进入Run方法后会执行Form类的几个方法来加载页面数据:BindingContextChanged()、HandleCreated()、Load()等方法。

我写的一个程序,在直接F5启动时,在运行我写的页面Load方法之前就抛出了异常。如图:

这里写图片描述

既然出现了异常,那么就是程序有问题,开始找bug。

在程序代码中添加断点,单步调试,发现每次都是执行到Application.Run(new Form1())时就抛出异常,心想,不科学啊,这里怎么会有错呢。接下来我想到在进入Application.Run(new Form1())方法之后,程序就会执行form的方法。所以我就去查了一下C#WinForm窗体事件执行次序,发现在load()方法之前还会执行一些其他的方法:

这里写图片描述

所以我就先将系统的这些方法重载一下,代码如下:

        protected override void OnBindingContextChanged(EventArgs e)
        {
            base.OnBindingContextChanged(e);
        }
        protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);
        }

然后发现程序在执行完OnHandleCreated()方法之后,并没有按顺序去执行OnBindingContextChanged()方法,而是执行了一个我自己给控件添加的一个方法,如下
我在页面上添加了一个combobox控件,给该控件添加了EditValueChanged() 方法,如下图所示:这里写图片描述
我添加的这个方法是用来在此控件选择的内容发生变化时,从数据库取相对应的数据绑定到另外的控件,由于我连接数据库用的是公司的WebService,需要在页面加载的时候设置一些参数,才可以成功连接到数据库,否则就会抛出异常。
而上述程序在执行完OnHandleCreated()方法之后,转而去执行EditValueChanged()方法导致抛出了异常。
发现了错误的地方,还要找到解决方法。
虽然不明白为什么程序的事件执行顺序是这样,但是不妨碍我们找到解决的办法。
既然它在load()方法执行之前就会执行,那么我们把它的初始化语句放在load()方法里不就可以了吗,如下:
这里写图片描述

checkedComboBoxEdit1.EditValueChanged += new EventHandler(checkedComboBoxEdit1_EditValueChanged);

在运行程序,完美解决。

  • 0
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EricXavier

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值