什么是形式“;加载时”;控件的等效项

本文关键字:控件 加载 什么 | 更新日期: 2023-09-27 18:00:07

我有一个listBox,我想在它加载时执行一个方法,尽管我不能使用Form"On_Load"触发器,因为listBox在TabControl中。

有没有一种方法可以让一个方法在对象初始化时执行?

什么是形式“;加载时”;控件的等效项

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

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

在窗体的构造函数代码(而不是设计器代码)中,添加到加载事件,然后添加您自己的自定义函数

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
    }
}

有同样的问题,前面的答案适用于单个案例。

但是,我需要在大多数控件中,以几种形式,在应用程序中做一些事情。通过使用接口解决:

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

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

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

您能使用HandleCreated事件吗?

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

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