2017-07-14 36 views
0

我已經創建了自定義控件。我想在Form.Shown事件後執行我的自定義控件。我曾嘗試在Control.GotFocus之前觸發過的事件Form.Shown事件。我想在這個Form.Shown事件之後進行我的控制中的更改。在FormControl中的Form.Shown事件上的反應

可能嗎?如果是的話,請告訴我如何做到這一點?

感謝,

回答

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,並在事件發生前設置該屬性筆:

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; 
     } 
} 
0

沒有,documented爲了激活首次Windows窗體時的事件如下:

  1. Control.HandleCreated
  2. Control.BindingContextChanged
  3. Form.Load
  4. Control.VisibleChanged
  5. Form.Activated
  6. 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); 
}