在C#中的用户控件中,公开并引发子控件的事件

26

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

2个回答

42

如果需要,您可以引发一个新事件并将任何订阅直接传递给控件:

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

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

太棒了!我做过类似的事情,通过在用户控件中公开子控件,显式添加事件处理程序。您的建议更加简洁明了!谢谢! - Anirudh Goel
11
尽管这个解决方案很优雅,但它有一个主要缺点:传递给处理程序的 sender 参数将是按钮而不是用户控件... 这使得无法将同一处理程序用于多个控件实例。 - Thomas Levesque
还有什么其他的东西可以让它工作吗?以某种方式声明添加的事件处理程序不起作用。 - Nap
如果您得到的参数是按钮而不是用户控件,可能您可以获取其父级,然后确定事件来自哪个父级用户控件...我不太确定,只是猜测...也许您必须正确编写用户控件才能实现这一点。 - Dean Hiller

1

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

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

}

完成此操作后,您可以像这样订阅其任何事件:

theUserControl.MyText.WhatEverEvent += ... 

希望这能帮到你!

谢谢,我现在已经做了类似的事情。一直在寻找一个优雅的解决方案,上面提供了这个。感谢你的帮助。+1 - Anirudh Goel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接