C#WinForm中构造函数和form_load的代码执行的区别?

时间:2022-09-12 11:08:46
我想把窗体设置成根据显示器的分辨率来调整大小和布局,但是我把下面代码放在构造函数和form_load下出现了不同的结果,在构造函数下出现了预期外的结果,不知道为什么,请大牛解释下,小弟刚入门:
            Rectangle recScreenArea = Screen.GetWorkingArea(this);
            int iWidth = recScreenArea.Width - 100;
            int iHeigh = recScreenArea.Height - 100;

            this.Width = iWidth;
            this.Height = iHeigh;
            splImgPanel.SplitterDistance = iWidth - 1440 + 860;
那个-100是我用来模拟不同屏幕分辩率用的,我的分辩率是1440,在全屏的情况下splImgPanel.SplitterDistance=860,以为我的界面是横向分为2块,右边的宽度固定(大小为1440-860),所以在不同屏幕下左边的宽度为iWidth - 1440 + 860;
问题是在构造函数下,跑完这段代码后 splImgPanel.SplitterDistance是760没错,但是最后变成了696,不知道在哪里出错了,我也跟不到;
但把同样的代码放到form_load下执行,最后splImgPanel.SplitterDistance就是760,跟预期的一样,高手们能解释下吗

7 个解决方案

#1


构造函数在Form_Load之前运行,一般地,构造函数会调用设计器创建控件的过程。至于两者的差别要看你的代码。

#2


构造函数早于formload很早.那时,很多窗口初始化的事都没做.而formload事件来的时候,很多窗口初始化的值都
做好了.差别很大.
可以打开***Form.Desiger.cs文件.在里面多下些断点,开始调试. 搞清执行顺序,就知道它俩的区别了

#3


默认的构造函数会在设计完窗体之后,用于呈现窗口布局,是在Load之前执行。通常这个过程是不会让窗体使用其它资源,比如数据。
而Load事件,在第一个显示窗体前发生,窗体显示前可以进行很多操作,比如加载默认数据;执行一个方法;为一个变量赋值等等。一般的加载默认数据都要放到Load事件中,而非构造函数里,尽管那样做也可以。

#4


WinForm 中的 Form_Load函数和他的构造函数 public Form()有区别:
(1):  public Form():程序入口,它的InitializeComponent()  
      做了许多初始化的工作,所以Load才能成为一个事件,InitializeComponent为你的程序作了必要的初始化工作
(2) Form_Load:装载窗口事件, 是窗体启动时触发的事件
总的来讲:
程序先执行InitializeComponent();   后执行Form1_Load,InitializeComponent是进行一系列的初始化,Form1_Load是在窗体装载时发生的一个时间。一般写程序你把自己要初始化的东东可以放在Form1_Load中,当然也可以在InitializeComponent中,那就要重载InitializeComponent了。

这个分析还不错。
http://bbs.csdn.net/topics/300030450

#5


C#WinForm中构造函数和form_load的代码执行的区别?
Form 构造函数内首先是创建一个 无边框窗口(dwExStyle WS_EX_LEFT // NULL)
其次调用设计器方法 在其次调用OnLoad方法专项通知Load事件(组件加载)
Load 中可以进行强制显示窗体利用ShowWindow函数

#6


构造 ,在构建实例的时候调用的
Load,在展现的时候调用的

#7


构造 -> Form_Load -> Form_Shown

三者的先后顺序。

#1


构造函数在Form_Load之前运行,一般地,构造函数会调用设计器创建控件的过程。至于两者的差别要看你的代码。

#2


构造函数早于formload很早.那时,很多窗口初始化的事都没做.而formload事件来的时候,很多窗口初始化的值都
做好了.差别很大.
可以打开***Form.Desiger.cs文件.在里面多下些断点,开始调试. 搞清执行顺序,就知道它俩的区别了

#3


默认的构造函数会在设计完窗体之后,用于呈现窗口布局,是在Load之前执行。通常这个过程是不会让窗体使用其它资源,比如数据。
而Load事件,在第一个显示窗体前发生,窗体显示前可以进行很多操作,比如加载默认数据;执行一个方法;为一个变量赋值等等。一般的加载默认数据都要放到Load事件中,而非构造函数里,尽管那样做也可以。

#4


WinForm 中的 Form_Load函数和他的构造函数 public Form()有区别:
(1):  public Form():程序入口,它的InitializeComponent()  
      做了许多初始化的工作,所以Load才能成为一个事件,InitializeComponent为你的程序作了必要的初始化工作
(2) Form_Load:装载窗口事件, 是窗体启动时触发的事件
总的来讲:
程序先执行InitializeComponent();   后执行Form1_Load,InitializeComponent是进行一系列的初始化,Form1_Load是在窗体装载时发生的一个时间。一般写程序你把自己要初始化的东东可以放在Form1_Load中,当然也可以在InitializeComponent中,那就要重载InitializeComponent了。

这个分析还不错。
http://bbs.csdn.net/topics/300030450

#5


C#WinForm中构造函数和form_load的代码执行的区别?
Form 构造函数内首先是创建一个 无边框窗口(dwExStyle WS_EX_LEFT // NULL)
其次调用设计器方法 在其次调用OnLoad方法专项通知Load事件(组件加载)
Load 中可以进行强制显示窗体利用ShowWindow函数

#6


构造 ,在构建实例的时候调用的
Load,在展现的时候调用的

#7


构造 -> Form_Load -> Form_Shown

三者的先后顺序。