什么是形式“;加载时”;控件的等效项
本文关键字:控件 加载 什么 | 更新日期: 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
事件吗?
您可以将代码放入构造函数中。
您通常不需要等待任何初始化。