我已经创建了自定义控件。我想在Form.Shown事件后执行我的自定义控件。我曾尝试在Control.GotFocus之前触发过的事件Form.Shown事件。我想在这个Form.Shown事件之后进行我的控制中的更改。在FormControl中的Form.Shown事件上的反应
可能吗?如果是的话,请告诉我如何做到这一点?
感谢,
我已经创建了自定义控件。我想在Form.Shown事件后执行我的自定义控件。我曾尝试在Control.GotFocus之前触发过的事件Form.Shown事件。我想在这个Form.Shown事件之后进行我的控制中的更改。在FormControl中的Form.Shown事件上的反应
可能吗?如果是的话,请告诉我如何做到这一点?
感谢,
你可以注册到事件:
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
,并在事件发生前设置该属性笔:
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;
}
}
没有,documented为了激活首次Windows窗体时的事件如下:
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);
}