我已经创建了自定义控件。我希望在Form.Shown事件之后在我的自定义控件中执行。我尝试过在 Form.Shown 事件之前触发的 Control.GotFocus 事件。我希望在 Form.Shown 事件之后对我的控件进行更改。
有可能吗?如果是的话,请建议我怎么做?
谢谢,
答案 0 :(得分:1)
您可以注册参加活动:
public class MyControl : UserControl
{
// you need a reference to the hosting Form
public MyControl(Form frmHost)
{
frmHost.Shown += FormHost_Shown;
}
private void FormHost_Shown(object sender, EventArgs e)
{
// Do your work
}
}
当您创建控件的实例时,只需传递对托管表单的引用:
this.Controls.Add(new MyControl(this));
如果您需要无参数构造函数,可以将托管Form
作为控件的属性,并在Shown
事件发生之前设置该属性:
public class MyControl : UserControl
{
private Form frmHost;
public Form FrmHost
{
get
{
return frmHost;
}
set
{
frmHost = value;
frmHost.Shown += FormHost_Shown;
}
}
private void FormHost_Shown(object sender, EventArgs e)
{
// Do your work
}
}
public class MyForm : Form
{
public MyForm()
{
InitializeComponent();
// User control was created elsewhere (perhaps in the designer)
myUserControl.FrmHost = this;
}
}
答案 1 :(得分:0)
不,第一次激活窗体时,documented事件顺序如下:
Control.HandleCreated
Control.BindingContextChanged
Form.Load
Control.VisibleChanged
Form.Activated
Form.Shown
如您所见,Shown
是最后一次被发射的事件。您需要在自定义基础Form
中实施自己的活动:
public event EventHandler AfterShwon;
protected override void OnShown(EventArgs e)
{
base.OnShow(e);
OnAfterShown(e);
}
protected virtual void OnAfterShown(e)
{
AfterShwon?.Invoke(this, e);
}