2017-07-14 25 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); 
}