2010-02-08 92 views
4

我有WinForms應用程序。我的表單派生類有UserControl派生類。 我只是把幾個控件放到一個UserControl中以簡化重用。 UserControlLoad事件未被解僱。我必須設置一些物業嗎?UserControl加載事件未被觸發

+2

請顯示您的代碼(的大綱)。 – 2010-02-08 09:11:10

+0

您是否已訂閱了來自班級中每個用戶控件的onload事件? – Ravisha 2010-02-08 09:12:24

回答

7

嘗試在你的用戶控件重寫OnLoad() method。從MSDN:

在onload方法還允許派生 類來處理事件,而不 附加委託。這是處理派生類中的 事件的首選技術。加載事件停止射擊

protected override void OnLoad(EventArgs e) 
{ 
    //Your code to run on load goes here 

    // Call the base class OnLoad to ensure any delegate event handlers are still callled 
    base.OnLoad(e); 
} 
+0

謝謝@Ashley,它完美地工作。你知道爲什麼OnLoad事件在某些情況下不起作用,當重寫OnLoad時,它每次都有效? – Samuel 2012-09-24 13:24:42

2

您不需要爲UserControl的事件觸發設置任何特殊屬性。您有兩種方法訂閱活動。在屬性(屬性網格)中選擇事件列表...雙擊Load屬性。所有必要的代碼片段都將放在適當位置,並且您的光標將以正確的方法等待您。

第二種方法是訂閱事件,像這樣:

public MyMainForm() 
{ 
    InitializeComponents(); 
    myUserControl.Load += new System.EventHandler(myUserControl_Load); 
} 

void myUserControl_Load(object sender, EventArgs e) 
{ 
    MessageBox.Show(((UserControl)sender).Name + " is loaded."); 
} 
+1

我確實在這裏做了你的代碼,但那根本不起作用。如果我改寫OnLoad,它的工作原理是...... – Ted 2010-11-17 22:35:39

+0

...它看起來像MSDN知道的更好,所以我也願意這樣做。 – IAbstract 2010-11-17 23:07:36

+0

Load + =必須在InitializeComponents()之前出現() – Batavia 2015-10-22 14:55:53

1

一個原因是,當你有你的控制父母,做這樣的事情

protected override void OnLoad(EventArgs e) 
    { 
    //do something 
    } 

你總是需要確保做到這一點

protected override void OnLoad(EventArgs e) 
    { 
    //do something 
    base.OnLoad(e); 
    }