我有一个构造函数:
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 :(得分: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事件调用(只能在构造函数调用之后存在)。