我在自定义控件中有一个组合框。如何向实现我的自定义控件的任何人/事物公开其中的特定事件,例如SelectedIndexChanged或KeyPress等?
答案 0 :(得分:79)
您可以转发这样的事件:
public event EventHandler SelectedIndexChanged
{
add { inner.SelectedIndexChanged += value; }
remove { inner.SelectedIndexChanged -= value; }
}
答案 1 :(得分:3)
您需要自己将这些代码编码到控件中 - 用户控件不会自动提升其子控件的事件。然后,您可以将实际控制交叉连接到用户控件的提升事件:
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);
}
不幸的是,您需要为您感兴趣的每个活动执行此操作。
答案 2 :(得分:2)
一个非常简单的解决方案,而不是自定义事件,将嵌套控件公开为自定义控件的属性。从那里你可以很容易地附加事件处理程序。公开子控件并不总是可取的,但根据控件类型和使用方式,它可能会起作用。
//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);
答案 3 :(得分:0)
还有另一种方法可以通过设计师来处理:
在设计器上,在自定义控件中,在“设计”下的组合框属性中将“修改器”设置为内部。
然后你需要做些什么来添加:
CustControlName.YourCombo.SelectedIndexChanged += YourCombo_SelectedIndexChanged;
以及:
private void YourCombo_SelectedIndexChanged(object sender, EventArgs e)
{
// Code to execute when the SelectedIndexIsChanged goes here
}