我已經創建了自定義控件。我想在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);
}