C# c中usercontrol中子控件的暴露和引发事件#

C# c中usercontrol中子控件的暴露和引发事件#,c#,winforms,user-controls,childcontrol,C#,Winforms,User Controls,Childcontrol,嗨。我有一个UserControl,其中包含一个文本框。我想访问textbox的textchanged事件,但在usercontrol的事件属性中,我看不到textbox的事件。如何使用C#在Winforms中公开和处理公开的UserControl中的子控件的特定事件。将整个文本框作为用户控件中的公共属性公开,并按您希望的方式订阅其事件。 示例: class myUserControl: UserControl { private TextBox _myText; public TextBox

嗨。我有一个UserControl,其中包含一个文本框。我想访问textbox的textchanged事件,但在usercontrol的事件属性中,我看不到textbox的事件。如何使用C#在Winforms中公开和处理公开的UserControl中的子控件的特定事件。

将整个文本框作为用户控件中的公共属性公开,并按您希望的方式订阅其事件。
示例:

class myUserControl: UserControl { 
private TextBox _myText;
public TextBox MyText { get {return _myText; } }
}

完成此操作后,您可以订阅其任何活动,如:

theUserControl.MyText.WhatEverEvent += ... 

希望这有帮助

如果愿意,您可以显示一个新事件并将任何订阅直接传递给控件:

public class UserControl1 : UserControl 
{
    // private Button saveButton;

    public event EventHandler SaveButtonClick
    {
        add { saveButton.Click += value; }
        remove { saveButton.Click -= value; }
    }
}

太棒了!我做了类似的事情,通过显式添加事件处理程序,因为我已经通过usercontrol公开了子控件。你的建议更简洁!谢谢尽管这个解决方案很优雅,但它有一个主要缺点:传递给处理程序的
发送方
参数将是按钮,而不是用户控件。。。这使得无法对控件的多个实例使用同一个处理程序。还有什么其他方法可以实现这一点吗?不知何故,以声明方式添加的事件处理程序不起作用。如果您使用按钮而不是UserControl作为参数,那么您可能可以使用父控件来判断事件来自哪个父控件……我不知道,但只是猜测一下……也许您必须正确编写用户控件才能做到这一点。谢谢,到目前为止,我也做过类似的事情。正在寻找上述提供的优雅解决方案。感谢您的帮助。+1