揭露潜在控制的事件

时间:2010-07-22 15:40:29

标签: c# winforms user-controls

我在自定义控件中有一个组合框。如何向实现我的自定义控件的任何人/事物公开其中的特定事件,例如SelectedIndexChanged或KeyPress等?

4 个答案:

答案 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
}