在哪里放置 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
事件)并(仅)执行该初始化是合适的。
例如,当我显示一个表单来显示后台任务的进度时,我将处理 Shown
或 Load
事件(为此目的,它们是等效的)而不是在此之前启动后台任务。这确保后台任务完成得如此之快,以至于表单在完成时甚至还没有完全初始化,这将阻止 post-task 代码关闭表单(你不能关闭一个表单还没有打开:)).
因此,在使用其他语言几年后,我正在重新学习 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
事件)并(仅)执行该初始化是合适的。
例如,当我显示一个表单来显示后台任务的进度时,我将处理 Shown
或 Load
事件(为此目的,它们是等效的)而不是在此之前启动后台任务。这确保后台任务完成得如此之快,以至于表单在完成时甚至还没有完全初始化,这将阻止 post-task 代码关闭表单(你不能关闭一个表单还没有打开:)).