我有一个WinForm应用程序,表单有TabControl,控件有三个选项卡tabPage1,tabPage2,tabPage3。
Tab' tabPage3'托管用户定义的控件,内部有一个或多个子控件。 现在我的问题在于tabPage3, 我知道这是一个纯粹的Winforms行为,直到你的父母没有激活子控件Onload事件才会被激活。 当焦点位于tabPage1,tabPage2时,我需要强制触发Onload事件。有没有办法强制Onload事件触发。
答案 0 :(得分:2)
这是一个非常不寻常的要求,强烈气味像XY问题。 Load事件在Winforms中被过度使用,它的副作用是Form或UserControl的默认事件。从VB6继承的行为之一,Load事件在该语言中是一个大问题。通过不给Winforms做出选择,可以轻松完成您想要的任务:
public UserControl3() {
InitializeComponent();
CreateHandle();
}
CreateHandle()调用强制执行,OnLoad将立即运行。但是请注意,这种情况发生的时间非常早,太早,无法完成您想要使用OnLoad()或Load事件的事情。这是相当有限的,只有真正需要发现控件的实际位置和大小。其他任何东西都属于构造函数。当然包括您现在在OnLoad()中运行的代码。
非常赞成使用构造函数。
答案 1 :(得分:0)
我对之前的项目有类似的问题,为了我的需要,我设法只迭代表单构造函数中的每个标签页(或者可能是我记不起的OnLoad),然后在显示之前将索引重置为0最终用户。
类似于:
for(int i = 1; i < tabControl.TabCount; i++)
tabControl.SelectTab(i);
tabControl.SelectTab(0);