我在自定义控件中有一个
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);
}
不幸的是,您需要对您感兴趣的每个活动执行此操作。
一个非常简单的解决方案,而不是使用自定义事件,是将嵌套控件公开为自定义控件的属性。从那里您可以非常轻松地将事件处理程序附加到它。公开子控件并不总是可取的,但根据控件类型以及您使用它的方式,它可能会起作用。
//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);
设计师还有另一种方法来处理这个问题:
在设计器上,在自定义控件中,在“设计”下的组合框属性上,将“修饰符”设置为内部。
然后在你需要做一些事情的地方添加:
CustControlName.YourCombo.SelectedIndexChanged += YourCombo_SelectedIndexChanged;
连同:
private void YourCombo_SelectedIndexChanged(object sender, EventArgs e)
{
// Code to execute when the SelectedIndexIsChanged goes here
}