【问题标题】:UserControl Load event not fired未触发用户控件加载事件
【发布时间】:2010-02-08 09:08:18
【问题描述】:

我有 WinForms 应用程序。我的 Form 派生类有 UserControl 派生类。 我只是将几个控件放在一个 UserControl 中以简化重用。 UserControlLoad 事件不会被触发。我必须设置一些属性吗?

【问题讨论】:

  • 请展示您的代码(大纲)。
  • 您是否订阅了班级中每个用户控件的 onload 事件?

标签: c# winforms events


【解决方案1】:

尝试覆盖用户控件中的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);
}

【讨论】:

  • 谢谢@Ashley,它运行良好。您知道为什么 OnLoad 事件在某些情况下不起作用,而在覆盖 OnLoad 时,它每次都起作用吗?
【解决方案2】:

您不需要设置任何特殊属性来触发 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.");
}

【讨论】:

  • 我完全按照您在此处编写的代码进行操作,但这根本不起作用。如果我改为覆盖 OnLoad 它可以工作......
  • 嗯...看起来 MSDN 知道得更好,所以我也会这样做。
  • Load+= 必须出现在 InitializeComponents() 之前
【解决方案3】:

Load 事件停止触发的一个原因是当您的控件的父级执行此类操作时

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

你总是需要确保这样做

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

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 2011-10-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 2016-10-27
    相关资源
    最近更新 更多