在哪里放置"在负载" C#表单的代码

时间:2015-01-21 05:20:43

标签: c# visual-studio

所以我在使用其他语言几年后再次重新学习C#和.net框架,并且我有一个"最佳实践"问题我希望有人能回答。

查看下面的代码,找到一个名为" Choose_File"的新表格,我一直把我的"加载到#34;

之后的代码
  

的InitializeComponent();

因为出于某种原因,我认为那是#34;在负载"方法。使用这种方法创建几个表单后,我不小心双击了表单的标题,它打开了真正的" _Load"方法,我假设我应该把#34;加载"代码一直以来。所以我的问题是,从实际意义上说这两种方法之间的实际真实世界差异是什么,因为两者似乎都有效?

namespace Personal_Finance_Manager
{
    public partial class Choose_File : Form
    {
        public Choose_File()
        {
            InitializeComponent();
        }

        private void Choose_File_Load(object sender, EventArgs e)
        {

        }
    }
}

2 个答案:

答案 0 :(得分:1)

表单显示(调用Form.Show())时会触发OnLoad事件。只要创建了Form的新实例,即使它尚未显示,也会调用构造函数。

只有在向用户显示表单时才应执行的代码(即实例化类成员)在OnLoad处理程序上运行,在表单显示之前需要执行的代码继续执行构造

答案 1 :(得分:1)

您应该尽早初始化类元素。对于大多数事情,这将在构造函数中。你可以在这里初始化控件属性,类字段等,它会正常工作。

但是,在创建基础本机窗口句柄之前,有些事情是Control实例(包括Form子类)无法做到的。对于这些类型的初始化,覆盖OnLoad()(或处理Load事件)并执行该初始化(仅限)是合适的。

例如,当我显示一个表单来显示后台任务的进度时,我将处理ShownLoad事件(为此目的,它们是等效的)并且不启动直到那时的背景任务。这确保了后台任务的完成速度非常快,以至于表单在完成时甚至还没有完全初始化,这会阻止任务后代码关闭表单(你不能这样做)关闭尚未开放的表格:))。