Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“放在哪里?”;“有载”;C#表格代码_C#_Visual Studio - Fatal编程技术网

“放在哪里?”;“有载”;C#表格代码

“放在哪里?”;“有载”;C#表格代码,c#,visual-studio,C#,Visual Studio,因此,在使用了几年其他语言之后,我再次学习C#和.net框架,我有一个“最佳实践”问题,希望有人能回答 查看下面名为“Choose_File”的新表单的代码,我已经将我的“加载”代码放在了 初始化组件() 行,因为出于某种原因,我认为这是“加载”方法。在使用这个方法创建了两个表单之后,我无意中双击了表单的标题,它打开了真正的“_Load”方法,我认为我应该一直把“on Load”代码放在这里。所以我的问题是,从实际意义上讲,这两种方法之间的实际区别是什么,因为这两种方法似乎都有效 namespa

因此,在使用了几年其他语言之后,我再次学习C#和.net框架,我有一个“最佳实践”问题,希望有人能回答

查看下面名为“Choose_File”的新表单的代码,我已经将我的“加载”代码放在了

初始化组件()

行,因为出于某种原因,我认为这是“加载”方法。在使用这个方法创建了两个表单之后,我无意中双击了表单的标题,它打开了真正的“_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事件(调用了form.Show())。每当创建表单的新实例时,即使尚未显示,也会调用构造函数


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

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

但是,在创建底层的本机窗口句柄之前,您无法对
控件
实例(包括
窗体
子类)执行某些操作。对于这些类型的初始化,覆盖
OnLoad()
(或处理
Load
事件)并执行该初始化(仅)是合适的


例如,当我显示一个窗体以显示后台任务的进度时,我将处理
显示的
加载
事件(为此目的,它们是等效的),并且在此之前不会启动后台任务。这确保了后台任务完成得如此之快,以至于表单在完成时还没有完全初始化,这将阻止任务后代码关闭表单(您无法关闭尚未打开的表单:))。

因此,根据上面的文章,我将代码放在构造函数中而不是加载中似乎是正确的?这是因为构造函数是在表单初始化时运行的,因此影响表单显示方式的任何内容都应该在该点运行,而不是在表单已显示后更改它,就像将代码放入加载时一样?依我看,这是个人偏好。我只喜欢初始化表单在构造函数上需要的变量,如果我必须设置文本框、标签等的文本,我会在OnLoad上进行初始化。对我来说,不是这样。个人习惯。您也可以像我看到的人们有时做的那样覆盖OnLoad事件。我不认为任何一个选项比其他选项好多少。实际上,当调用
OnLoad()
时,实际上还不会绘制表单。因此,您可以将初始化延迟到这一点,而用户不会注意到。但是,所有内容都会有默认值,因此如果将自定义初始化延迟到该点,可能会有少量额外开销,因为各种本机数据结构也必须已初始化为默认值(即,它们被初始化两次)。因此,我倾向于尽可能早地初始化。我只使用
加载
显示
来处理之前无法完成的事情。请注意,
加载()
加载
事件和
显示
仅在第一次显示表单时调用/引发。例如,如果设置
Visible=false然后<代码>可见=真或者调用
Hide()
然后再次调用
Show()
,您不会得到另一个
显示的事件。看,如果我理解正确,我所有的“这是表单的初始状态”代码都应该放在构造函数中,所有的“这些是可以改变或改变基本状态的东西”都应该放在加载中,以防止它们在初始表单加载之前触发?我不确定你所说的“基本状态”是什么意思,但我认为不是,我不是这么说的。表单有各种各样的状态,甚至是在构造函数中初始化的状态,在用户与表单交互时可能会发生变化,这很好。但是,在所有属于“初始化”的内容中(即设置表单的初始值),我会尽可能早地这样做,以最小化对象中的重复工作。如果出现了一些无法在构造函数中安全完成的事情,那么我会将其推迟到
OnLoad()
或同等版本。