2010-11-08 49 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事件(只能在構造函數調用完成後才存在)調用。