【发布时间】:2010-02-08 09:08:18
【问题描述】:
我有 WinForms 应用程序。我的 Form 派生类有 UserControl 派生类。
我只是将几个控件放在一个 UserControl 中以简化重用。 UserControl 的 Load 事件不会被触发。我必须设置一些属性吗?
【问题讨论】:
-
请展示您的代码(大纲)。
-
您是否订阅了班级中每个用户控件的 onload 事件?
我有 WinForms 应用程序。我的 Form 派生类有 UserControl 派生类。
我只是将几个控件放在一个 UserControl 中以简化重用。 UserControl 的 Load 事件不会被触发。我必须设置一些属性吗?
【问题讨论】:
尝试覆盖用户控件中的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);
}
【讨论】:
您不需要设置任何特殊属性来触发 UserControl 的事件。您有两种订阅事件的方法之一。在“属性”(属性网格)中选择事件列表...双击“加载”属性。所有必要的代码都将放置到位,您的光标将以正确的方式等待您。
第二种方法是像这样订阅事件:
public MyMainForm( )
{
InitializeComponents();
myUserControl.Load += new System.EventHandler(myUserControl_Load);
}
void myUserControl_Load(object sender, EventArgs e)
{
MessageBox.Show(((UserControl)sender).Name + " is loaded.");
}
【讨论】:
Load 事件停止触发的一个原因是当您的控件的父级执行此类操作时
protected override void OnLoad(EventArgs e)
{
//do something
}
你总是需要确保这样做
protected override void OnLoad(EventArgs e)
{
//do something
base.OnLoad(e);
}
【讨论】: