我有一个listBox,我想在加载时执行一个方法,虽然我不能使用Form“On_Load”触发器,因为ListBox在TabControl中。
当对象初始化时,有没有办法让方法执行?
答案 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)
您可以将代码放在构造函数中。
您通常不需要等待任何初始化。