【发布时间】:2010-07-22 15:40:28
【问题描述】:
我在自定义控件中有一个组合框。如何将其中的特定事件(例如 SelectedIndexChanged 或 KeyPress 等)公开给实现我的自定义控件的任何人/事物?
【问题讨论】:
标签: c# winforms user-controls
我在自定义控件中有一个组合框。如何将其中的特定事件(例如 SelectedIndexChanged 或 KeyPress 等)公开给实现我的自定义控件的任何人/事物?
【问题讨论】:
标签: c# winforms user-controls
你可以这样转发事件:
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
}
【讨论】: