c#从另一个类中的另一个静态事件中引发事件

时间:2012-08-13 12:52:37

标签: c# events

需要帮助从另一个类调用事件。 我有宣布活动的课程:

     public class MxPBaseGridView : GridView
    {

        public event AddNewItemsToPopUpMenuEventHandler AddNewItemsToPopUpMenu;
          ...
    }

我需要调用event的另一个类有方法和“AddNewItemsToPopUpMenuEventHandler”委托

    public delegate void AddNewItemsToPopUpMenuEventHandler(PopupMenuShowingEventArgs e);
    public static class GridViewUtils
{
public static void gridView_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
    {                     
        if (e.MenuType != DevExpress.XtraGrid.Views.Grid.GridMenuType.Row)
        {
           if (menu != null)
            {               
                if (sender is MxPBaseAdvBandedGridView)
                {
                    MxPBaseAdvBandedGridView currentGrid = sender as MxPBaseAdvBandedGridView;

...

                    currentGrid.AddNewItemsToPopUpMenu();
                    if (currentGrid.AddNewItemsToPopUpMenu != null) //there i need to call event
                        currentGrid.AddNewItemsToPopUpMenu(e); // how you understand it doesn't work 
                }

那么做同样工作的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您只能在已定义事件的类中调用事件。常见的是使用特定方法来触发事件,您必须在定义事件的类中添加该事件。在你的情况下,在类MxPBaseGridView中。添加以下内容:

public void OnAddNewItemsToPopUpMenu(<eventargstype> e) {
    var addNewItemsToPopUpMenu = AddNewItemsToPopUpMenu;
    if (addNewItemsToPopUpMenu != null)
        addNewItemsToPopUpMenu(this, e);
}

注意:我不确定eventargs类型是什么,所以我把它打开了。

然后你可以用静态方法调用这个方法。

注意:通常我将On ...方法定义为private,如果需要,将其定义为protected。在这种情况下,我已将其定义为公开,因为您需要从课堂外调用它。