我有一個用戶控件,Load事件發射得太早。用戶控件有一些傳入構造函數的對象,並有一個加載事件。Form.Load提早觸發
public int num;
public String value;
public myControl(int num, String value)
{
InitializeComponent();
this.num = num;
this.value = value;
}
private void MyControl_Load(object sender, EventArgs e)
{
sometextbox.Text = value;
someothertextbox.Text = num.ToString();
}
我的問題是,無論何時調用控件,initialize都會調用Load事件太早。走向的InitializeComponent()在Designer.cs結束,它使用此代碼
this.Load += new System.EventHandler(this.MyControl_Load);
,右加Load事件到控制它增加了事件處理程序之後,它進入的事件。所以,如果我不得不在設計這樣的事情...
Some code 1
Some code 2
this.Load += new System.EventHandler(this.MyControl_Load);
Some code 4
Some code 5
它實際上將跳出在InitializeComponent()和去運行,MyControl_Load,回來與somecode4和somecode5整理出來了。
這不會是一個正常的問題,因爲Load只是設置一些文本框,但它們使用通過構造函數傳入的值,並且由於值在initializeComponent()後設置,所有內容都剛剛結束up爲NULL。
簡短的回答是把this.num = num
和this.value = value
以上InitializeComponent調用(),但此相同的方法適用於多個其他用戶控件,而我只是好奇,爲什麼這個方法沒有這方面的工作用戶控制。
你所描述的內容聽起來不可能。註冊事件處理程序不會立即調用該事件處理程序。你有沒有在調試器中放置一個斷點'this.Load + = new System.EventHandler(this.MyControl_Load);'並通過它來追蹤? – adv12
這些文本框是您的自定義控件的子項嗎? – Powerlord
問題中沒有提示,你必須發佈repro代碼。或者只是不打擾,因爲在這種情況下使用Load事件是錯誤的,請將代碼移到構造函數中。 –