揭露潜在的控制事件

我有一个自定义控件中的combobox。 我怎样才能暴露特定的事件,如SelectedIndexChanged或KeyPress等等任何人/东西实现我的自定义控件?

你可以像这样转发事件:

public event EventHandler SelectedIndexChanged { add { inner.SelectedIndexChanged += value; } remove { inner.SelectedIndexChanged -= value; } } 

您将需要将这些代码自己编码到控件中 – 用户控件不会自动提升其子控件的事件。 然后,您可以将您的实际控件交叉连接到用户控件的提升事件:

  public event EventHandler SelectedIndexChanged; private void OnSelectedIndexChanged(object sender, EventArgs e) { if (SelectedIndexChanged != null) SelectedIndexChanged(sender, e); } public UserControl1() { InitializeComponent(); cb.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged); } 

不幸的是,您需要为您感兴趣的每一件事情做到这一点。

一个非常简单的解决scheme,而不是自定义事件,将作为自定义控件的属性公开嵌套控件。 从那里你可以很容易地附加事件处理程序。 暴露儿童控制并不总是可取的,但取决于控制types和使用方式,它可能会起作用。

 //create an instance of my control MyCustomControl controlInstance = new MyCustomControl(); //attach and event handler to the exposed subcontrol controlInstance.SaveButton.Click += new EventHandler(SaveButton_Click); 

还有另一种方式来处理,通过devise师:

在devise器上,在您的自定义控件中,在“devise”下的combobox属性中将“修改器”设置为内部。

然后,你需要做些什么来添加:

 CustControlName.YourCombo.SelectedIndexChanged += YourCombo_SelectedIndexChanged; 

随着 :

 private void YourCombo_SelectedIndexChanged(object sender, EventArgs e) { // Code to execute when the SelectedIndexIsChanged goes here }