2010-11-08 27 views
1

我有一个构造函数:c#先执行构造函数还是onLoad?

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首先被执行

这是可行的吗?

+0

可能重复[什么设置代码应该在窗体构造函数与表单加载事件?](http://stackoverflow.com/questions/2521322/what-setup-code-should-go-in-form-constructors-对形式加载事件) – 2016-05-11 13:53:20

回答

4

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

+0

是的,构造函数总是先被调用。除非您有表格的实例,否则不能调用加载函数。 – Justin 2010-11-08 22:52:17

1

这是不可能的首先被执行的onload,你需要把这些代码在事业的建设者最先被执行的,很基本的规则在任何OOP语言构造执行路径

5

。首先是完成是一个未解决的问题。从技术上讲,构造函数可以修改需要创建句柄的Form类属性。就像使用Handle属性一样,保持简单。这将触发OnLoad和Load事件,然后在构造函数完成之前运行完成。

这很少见,但可能。

0

该对象需要在它可以处理任何事件(例如Load)之前进行构造。 Form1_Load无法在Form1构建之前执行。为了回答你的问题,在表单构建完成之前,Load不可能发生。如果你在Load函数中做的所有事情都在初始化这些字符串,你可以将它们从Load中取出并放入构造函数或声明它们的地方。例如

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> 
} 
0

这已被很好地回答了,但有一点需要注意的是,这些名称可能会有帮助,因为这些名称遵循相当常见的约定。通常情况下,事件处理程序方法是为事件发布对象和事件命名的... Form1_Load看起来没什么不同。

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