在哪里放置 C# Forms 的 "On Load" 代码

Where to put "On Load" code for C# Forms

因此,在使用其他语言几年后,我正在重新学习 C# 和 .net 框架,我有一个 "best practice" 问题,希望有人能回答。

查看以下名为 "Choose_File" 的新表单的代码,我一直将我的 "on load" 代码放在

之后

InitializeComponent();

行,因为出于某种原因我认为那是 "on load" 方法。使用此方法创建几个表单后,我不小心双击了表单的 header,它打开了真正的“_Load”方法,我假设我应该一直放置 "on load" 代码。所以我的问题是,从实际意义上讲,这两种方法在现实世界中的实际区别是什么,因为这两种方法似乎都有效?

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

        private void Choose_File_Load(object sender, EventArgs e)
        {

        }
    }
}

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

仅当向用户显示表单时才应执行的代码(即实例化 class 成员)在 OnLoad 处理程序上执行,需要在 [=16] 之前执行的代码=] 表格显示在构造函数上。

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

但是,在创建底层原生 window 句柄之前,您无法使用 Control 实例(包括 Form 子 class)执行某些操作.对于这些类型的初始化,覆盖 OnLoad()(或处理 Load 事件)并(仅)执行该初始化是合适的。

例如,当我显示一个表单来显示后台任务的进度时,我将处理 ShownLoad 事件(为此目的,它们是等效的)而不是在此之前启动后台任务。这确保后台任务完成得如此之快,以至于表单在完成时甚至还没有完全初始化,这将阻止 post-task 代码关闭表单(你不能关闭一个表单还没有打开:)).