用户控件中的自定义事件

本文关键字:自定义 事件 控件 用户 | 更新日期: 2023-09-27 17:54:10

我的用户控件有一个私有绑定源:

private System.Windows.Forms.BindingSource _bsMyBindingSource;

绑定源对象支持List changed事件,这正是我想要捕获和使用的事件。

private void _bsMyBindingSource_ListChanged(object sender, ListChangedEventArgs e)
      {
      }

现在…因为_bsMyBindingSource是一个私有成员,我不想直接公开这个事件(如果可能的话?)

我希望我的用户控件有一个OnChange事件,它将在内部_bsMyBindingSource_ListChanged被调用时被调用。

如何做到这一点?

用户控件中的自定义事件

您只需要从_bsMyBindingSource_ListChanged处理程序中引发您的自定义事件。

您可以将其保留为ListChangedEventHandler:

public class MyUserControl : UserControl
{
    public event ListChangedEventHandler OnChange;
    private void _bsMyBindingSource_ListChanged(object sender, ListChangedEventArgs e)
    {
        // if no listeners, OnChange will be null, so need to check
        if(this.OnChange != null)
        {
            this.OnChange(this, e);
        }
    }
}

或者自定义事件类型:

public class MyUserControl : UserControl
{
    public event EventHandler OnChange;
    private void _bsMyBindingSource_ListChanged(object sender, ListChangedEventArgs e)
    {
        // if no listeners, OnChange will be null, so need to check
        if(this.OnChange != null)
        {
            this.OnChange(this, new EventArgs());
        }
    }
}

然后你的页面或其他东西可以听这个事件:

public class MyPage : Page
{
    private MyUserControl myControl;
    public void MyPage_Load()
    {
        myControl.OnChange += myControl_OnChange;
    }
    private void myControl_OnChange(object sender, ListChangedEventArgs e)
    {
        // ... do something
    }
}