c#首先执行构造函数或onLoad会执行什么操作?

时间:2010-11-08 22:20:12

标签: c# .net winforms

我有一个构造函数:

public Form1(string startDate, string endDate, string cbQCValues,string cbAnalytes, string cbInstruments,bool copy_of_form)
    {
        InitializeComponent();
        dateStart.Value = Convert.ToDateTime(startDate);
        dateEnd.Value = Convert.ToDateTime(endDate);


        GenerateGraph();
    }

我也有一个onLoad

  private void Form1_Load(object sender, EventArgs e)
            {

               string qcvalues_query = "SELECT DISTINCT name FROM qvalues ORDER by name";
               string analytes_query = "SELECT DISTINCT compound FROM qvalues ORDER by compound";
               string instruments_query = "SELECT DISTINCT instrument FROM batchinfo WHERE instrument <> '' AND instrument is not Null ORDER by instrument";
...
...
}

首先执行什么?我需要确保onLoad首先被执行

这是可能的吗?

5 个答案:

答案 0 :(得分:5)

当然构造函数首先被执行,在任何OOP语言中都是非常基本的规则。是否完成首先是一个悬而未决的问题。从技术上讲,构造函数可以修改需要创建句柄的Form类属性。就像使用Handle属性一样,保持简单。这将触发OnLoad和Load事件,然后在构造函数完成之前运行完成。

这种情况很少见但可能。

答案 1 :(得分:4)

构造函数 - Form1_load是一个实例方法,需要一个有效的实例才能被调用。

答案 2 :(得分:1)

首先执行onload是不可能的,你需要将该代码放在构造函数执行路径中

答案 3 :(得分:0)

在处理任何事件(例如Load)之前,需要构造对象。 Form1_Load在构造Form1之前无法执行。要回答您的问题,在构建表单之前无法进行加载。如果你在Load函数中所做的只是初始化那些字符串,你可以将它们从Load中拉出来并将它们放在构造函数中或声明它们的位置。 e.g。

public partial class Form1
{
    private string qcvalues_query = "SELECT DISTINCT name FROM qvalues ORDER by name";
    private string analytes_query = "SELECT DISTINCT compound FROM qvalues ORDER by compound";
    private string instruments_query = "SELECT DISTINCT instrument FROM batchinfo WHERE instrument <> '' AND instrument is not Null ORDER by instrument";

    <rest of code here>
}

答案 4 :(得分:0)

这已经得到了很好的回答,但要注意的一件事可能会有所帮助,这些名称遵循相当普遍的惯例。通常,事件处理程序方法是为事件发布对象和事件命名的... Form1_Load看起来没什么不同。

该方法由实例的Load事件调用(只能在构造函数调用之后存在)。