2010-02-08 94 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); 
    }