什么是控件的“On_Load”等效表单?

时间:2011-06-22 15:31:05

标签: c# .net windows winforms

我有一个listBox,我想在加载时执行一个方法,虽然我不能使用Form“On_Load”触发器,因为ListBox在TabControl中。

当对象初始化时,有没有办法让方法执行?

6 个答案:

答案 0 :(得分:2)

最接近的控件模拟是HandleCreated事件。这将在创建基础控件句柄时触发,这稍稍在父窗口的Loaded事件将触发之前。

答案 1 :(得分:2)

正如@SLaks所说,你可以放入你班级的构造函数。但是,如果您要准备的内容依赖于表单中的其他元素,则可以在表单加载结束时,但在实际呈现给用户之前添加到事件处理程序队列。

在表单的构造函数代码(不是设计器代码)中,添加到load事件,然后添加自己的自定义函数

public partial class frmYourForm : Form
{
    public frmYourForm()
    {
       Load += YourPreparationHandler;
    }

    private void YourPreparationHandler(object sender, EventArgs e)
    {
        // Do you code to prepare list, combos, query, bind, whatever
    }
}

答案 2 :(得分:1)

您可以使用OnHandleCreated(EventArgs e)。但是,它也会在设计时触发。您也可以覆盖它。

答案 3 :(得分:0)

您可以使用HandleCreated活动吗?

答案 4 :(得分:0)

遇到同样的问题,以前的答案适用于单个案例。

但是,我需要在应用程序中以多种形式在大多数控件中执行某些操作。 通过使用接口解决:

interface IOnLoad
{
  void OnLoad();
}

并添加到后代控制中:

public partial class MyButton : Button, IOnLoad
{
  void OnLoad() { // call "OnLoadDelegate" }
}

public partial class MyForm : Form
{

  public void MyForm_Load(...) {
    foreach(Control eachControl in Controls) {
      if (eachControl is IOnLoad) {
        IOnLoad eachOnLoadControl = (IOnLoad)eachControl;
        eachOnLoadControl.OnLoad();
      }
    } // foreach
  }
} // class

它更复杂,但它符合我的要求。

答案 5 :(得分:-1)

您可以将代码放在构造函数中。

您通常不需要等待任何初始化。